jQuery UI draggable不能处理新创建的DOM元素
我有一些DOM元素可以使用jQuery UI拖动。所有工作正常但是当我使用jQuery创建一些元素时,它们根本不可拖动。 即
$('div.draggable').draggable(); //Existing element , it works :) $('p.draggable').draggable() ; //Newly created paragraph with same class name, it doesnt work at all :(
提前致谢 !!!
我正在尝试这个:
$(document).ready(function(){ $('body').append('Newly Created Paragraph
'); $('p.draggable').draggable(); **//This is not working** });
但不知何故,这是有效的
$(document).ready(function(){ $('body').append('Newly Created Paragraph
') .find('p.draggable').draggable(); **This is working** });
我知道它已经有一段时间了,但是这个问题最近也让我感到烦恼。 正如其他人提到的那样,你必须在新创建的项目上重新运行.draggable()
,但是如果在.draggable()
定义了某些选项,那么这不起作用。 还有什么不起作用的是将$().draggable()
放在一个函数中,然后在创建一个新元素后调用该函数(但这个技巧确实可以用于重置droppables – 去图)。
无论如何,长话短说 – >将$().draggable()
设置在一个函数中,然后在创建新元素DID WORK之后调用该函数,但是我不得不把document ready
函数拿出去…..我禁用了它,它起作用了。
您可以多次调用该函数,并在每个创建的元素之后继续工作。 看起来如果它在document.ready
声明中,那么它的一次性交易……
希望有所帮助。
在将新创建的元素插入DOM之后,需要调用draggable()。
原因是第一行代码只匹配现有元素。 在第一行中未选择新创建的元素。
实际上似乎有可拖动的问题。 当你附加一些htmlTag然后尝试找到它并使其可拖动时,它无法识别它。 尝试使用createElement
创建一个新元素,然后追加它。 希望它有效
var newEle = document.createElement('p'); $(newEle).attr("class","draggable").draggable(); $('body').append($(newEle));
要么
var newEle = document.createElement('p'); $(newEle).attr("class","draggable"); $('body').append($(newEle)); $('p.draggable').draggable();
我有这个问题,但看完之后我就可以解决了。 所以你必须在构建新元素后再次调用draggable()方法,这是我的代码:
$(".in-browser").each(function(){ $(this).dblclick(function(){ var browseIn = $(this).data("href"); var browserHTML = '\ \ \ \ \ '; $("body").append(browserHTML); $(".draggable").draggable(); //look at here }); }); \
每次调用事件动作时都应该调用draggable()函数:
$('body').on('click', '.add-new-table', function () { $( ".canvas" ).prepend('
'); $(function(){ $(".draggable" ).draggable({ containment: "parent" }); }); });
您必须在新创建的对象的实例上应用draggable,重写代码:
它现在应该工作。
在新元素生成后,您可以使用setTimeout调用draggable函数。
$('div').click(function(){ $('body').append(''); setTimeout(function() { $('div.box').draggable({ drag: function( event, ui ) {}, cursor:'-webkit-grabbing' }); },1000); })