我有一个脚本可以选择和拖动多个元素。它工作正常但是当我想为该函数添加另一个新元素时,将它附加到DOM,它不起作用。功能是:
$(function() {
var selected = $([]), offset = {top:0, left:0};
$("#selectable1").selectable();
$("#selectable1 span").draggable({
start: function(ev, ui) {
$(this).is(".ui-selected") || $(".ui-selected").removeClass("ui-selected");
$("span").removeClass("cica"); // ads class Cica to the draged/selected element
$(this).addClass("cica");
selected = $(".ui-selected").each(function() {
var el = $(this);
el.data("offset", el.offset());
$(this).text("Selected and dragging object(s)");
});
offset = $(this).offset();
},
drag: function(ev, ui) {
var dt = ui.position.top - offset.top, dl = ui.position.left - offset.left;
selected.not(this).each(function() {
var el = $(this), off = el.data("offset");
el.css({top: off.top + dt, left: off.left + dl});
});
},
stop: function(ev, ui){
$(this).text("Drag has stopped");
}
});
});
新元素添加如下:
$('<span class="drag">Xia</span>').appendTo('#selectable1');
我知道我可以使用live来使其工作,但我不知道在脚本中将它添加到何处。我只知道如何在点击,鼠标悬停等事件上添加它。
如果您对此有一些提示,请与我们联系。
谢谢
答案 0 :(得分:3)
我要做的是设置“#selectables1”,其中包含一个名为“dragSetup”的虚构事件的事件处理程序。这看起来像这样:
$('#selectables1').bind('dragSetup', function() {
$(this).find('span:not(.dragReady)')
.draggable({ ... })
.addClass('dragReady');
});
然后,无论何时添加新内容,您都可以致电:
$('#selectables1').trigger('dragSetup');
答案 1 :(得分:2)
您必须使用live
将事件附加到DOM加载后添加的DOM元素。 jQuery Doc for live