在动态创建的元素上启用可拖放 jQuery
Enable draggable and droppable on dynamically created elements jQuery
我想在动态创建的元素上自动启用 'draggable' 和 'droppable'。我不想在将元素添加到 DOM 后重新初始化它。
例如:
$('static_element_such_as_body').on('event', 'dynamicElement', function(){
console.log('yayyyy');
});
这是一个真正的动态事件处理程序。如何将 'draggable' 和 'droppable' 应用到 .on 或 .live 活页夹?
这是我用于拖放的代码:
$('.draggable').draggable({
helper: function() { //helper function is used to duplicate the event dragged
return $('<p>winning</p>').append($(this).find('.name').clone()); //Idk what class or where .name is but without it, it bombs out
},
stack: ".draggable", //this changes our z index to be the upper most
start: function(event, ui) { //this fires on start
c.tr = this; //set up our c cariable
c.helper = ui.helper;
}
}).droppable({ //this let's us know this element is droppable
drop: function(event, ui) { //when you actually drop
$(c.helper).remove();
},
over: function (event, ui) { //called when we are hovering over a droppable element with this selector
console.log('over');
},
out: function(event, ui){
console.log('left');
}
});
显然没人知道,所以我想出了一个更 'automated' 的解决方案。添加元素后,无需手动 re-initializing,您可以使用此事件处理程序为您自动执行 re-initializing。
$mainContainer.on('DOMNodeInserted', function(e){
if($.inArray('relatable', e.target.classList) != -1){
drag_drop_init();
if(helper_bool_isRelatableEnabled){
drag_drop_enable();
}else{
drag_drop_disable();
}
}
});
其中$mainContainer是一个静态元素,比如$('body'),而'relatable'是class的名称,我用它来知道这个元素应该允许拖动和可丢弃的。这是我用来初始化的 class 即:$('.relatable').draggable()
我想在动态创建的元素上自动启用 'draggable' 和 'droppable'。我不想在将元素添加到 DOM 后重新初始化它。
例如:
$('static_element_such_as_body').on('event', 'dynamicElement', function(){
console.log('yayyyy');
});
这是一个真正的动态事件处理程序。如何将 'draggable' 和 'droppable' 应用到 .on 或 .live 活页夹?
这是我用于拖放的代码:
$('.draggable').draggable({
helper: function() { //helper function is used to duplicate the event dragged
return $('<p>winning</p>').append($(this).find('.name').clone()); //Idk what class or where .name is but without it, it bombs out
},
stack: ".draggable", //this changes our z index to be the upper most
start: function(event, ui) { //this fires on start
c.tr = this; //set up our c cariable
c.helper = ui.helper;
}
}).droppable({ //this let's us know this element is droppable
drop: function(event, ui) { //when you actually drop
$(c.helper).remove();
},
over: function (event, ui) { //called when we are hovering over a droppable element with this selector
console.log('over');
},
out: function(event, ui){
console.log('left');
}
});
显然没人知道,所以我想出了一个更 'automated' 的解决方案。添加元素后,无需手动 re-initializing,您可以使用此事件处理程序为您自动执行 re-initializing。
$mainContainer.on('DOMNodeInserted', function(e){
if($.inArray('relatable', e.target.classList) != -1){
drag_drop_init();
if(helper_bool_isRelatableEnabled){
drag_drop_enable();
}else{
drag_drop_disable();
}
}
});
其中$mainContainer是一个静态元素,比如$('body'),而'relatable'是class的名称,我用它来知道这个元素应该允许拖动和可丢弃的。这是我用来初始化的 class 即:$('.relatable').draggable()