我想知道,如果它能够使用的功能等.delegate()
.on()
以一种方式,它会听jQuery UI的事件,如或任何draggable
。 我有以下几点:
HTML:
<div id="wrapper"></div>
JavaScript的:
$(function(){
var addMe='<div id="draggable" class="ui-widget-content"><p>Drag me around</p></div>'
$( "#wrapper" ).delegate('#draggable','draggable',function(){
console.log('its something!');
});
//$(".draggable").draggable();
$("#wrapper").append(addMe)
})
这将是该元件draggable
的动态添加,这样的方式,我想用delegate
或on
。
另外请注意,我所知道的我如何从阿贾克斯GET的结果添加可拖动列表项? 甚至认为解决方案可以为我工作,我必须修改这不是我问。员额()函数。
这里的问题
这是一个很常见的问题....如何使用委托来调用插件,并没有圣杯一样on()
在几乎所有的情况下jQueryUI的部件存在不是简单的结合事件更能参与,需要html和要素数据进行connstructed。
虽然没有授权的方法,你可以使用$ .ajaxComplete()作为一个全球性的处理程序初始化插件,它是否适合你的应用程序。 它可以被绑定到任何元件,其允许使用this
处理程序中
$('#content').ajaxComplete(function(e, xhr, settings){
/* url conditional*/
if (settings.url == 'getMoreDraggables.php') {
$(this).find('.newDraggable').removeClass('newDraggable').draggable()
}
/* element conditional */
if( $(this).find('.newDraggable').length){
/* run code for true*/
}
});
还可以根据XHR对象添加条件语句
这是不可能使用事件委托自动创建的jQuery UI部件。 最好的办法是明确地摧毁和重建。
$('.draggable').draggable('destroy');
$('.draggable').draggable();
见http://jsfiddle.net/hTCLB/
你不能只执行一个函数调用.draggable()
在你的Ajax请求的回调?
否则,你可以观察一个包装DOM突变观察和使用匿名函数来调用.draggable()
当新的元素被添加。 这是非常相似的事件代表团,你问过,但我不知道怎么说好是旧版本的IE。
示例代码与观察:
var MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver;
var observer = new MutationObserver(function (mutations) {
mutations.forEach(function (mutation) {
if (mutation.type === 'childList' && mutation.addedNodes.length) {
$("#draggable").draggable();
}
});
});
observer.observe($('#wrapper')[0], { attributes: false, childList: true, characterData: true });
用的jsfiddle DOM突变观察
参考
另外,如果你不能使用Ajax调用的回调对于这一点,赔率是有应用程序中的逻辑/设计缺陷。 我建议采取上一下推搡下黑客的DOM突变观察员之前。
文章来源: Is it possible to use a jquery function such as delegate to listen to jquery ui events?