是否有可能使用jQuery的功能,如委托听jQuery UI的事件?(Is it possible

2019-09-18 16:49发布

我想知道,如果它能够使用的功能等.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的动态添加,这样的方式,我想用delegateon

另外请注意,我所知道的我如何从阿贾克斯GET的结果添加可拖动列表项? 甚至认为解决方案可以为我工作,我必须修改这不是我问。员额()函数。

这里的问题

Answer 1:

这是一个很常见的问题....如何使用委托来调用插件,并没有圣杯一样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对象添加条件语句



Answer 2:

这是不可能使用事件委托自动创建的jQuery UI部件。 最好的办法是明确地摧毁和重建。

$('.draggable').draggable('destroy');
$('.draggable').draggable();

见http://jsfiddle.net/hTCLB/



Answer 3:

你不能只执行一个函数调用.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?