插件选择器元素上的jQuery.live()

时间:2011-01-21 08:41:20

标签: jquery plugins css-selectors live

好吧,我的问题是,我创建了一个jQuery插件,它将点击和鼠标悬停事件绑定到选择器提供的元素。现在,我需要这些事件,而不是“.live”事件,经过大量的搜索,我找到了'{'解决方案here

其中,给定的解决方案如下..

(function($) {
  $.fn.liveBindTest = function() {
    return this.each(function() {
      $(this).click(function(){
        console.log('click');
        return false;
      });
    });
  };
})(jQuery);

$('a').live('click', function(){ $(this).liveBindTest(); });

尽管如此,这没有意义,因为插件不会将实时点击绑定到提供的“选择器”。另一方面,它会''将'click事件绑定到选择器元素。 (在这种情况下,锚标签,而不是由开发人员选择器集动态提供)

上面的示例只是采用漫长的路径将实时点击绑定到所有锚元素。其中,适用于您需要为插件实时绑定特定元素的情况。但我的插件完全基于最终开发人员使用插件提供的选择器。因此,这个解决方案意味着每次开发人员都可以,

一个。在实际初始化插件之前,需要手动绑定PLUGIN需要的每个实时事件。有点像..

$('*:not(.complicatedSelectorHere)').live('click', function(){
    $(this).liveBindTest();
});

B中。他们需要进入jQuery.plugin.js文件,转到代码的底部,然后修改那里的实时事件。这将是一种丑陋的做事方式,而且根本不需要便携,这也是所需要的,便携性。

所以我最后的问题,以确保每个人都清楚..

问题:如何将LIVE事件绑定到提供给插件的ALL SELECTORS

请不要在下面提供明显的解决方案,因为它不起作用......

(function($) {
  $.fn.liveBindTest = function() {
    return this.each(function() {
      $(this).live('click', function(){
        console.log('live clicked');
        return false;
      });
    });
  };
})(jQuery);

1 个答案:

答案 0 :(得分:6)

每个jQuery对象都有selector属性,所以只需使用:

$.fn.liveBindTest = function () {
    $(this.selector).live('click', function () {
        console.log('live clicked');
        return false;
    });
});

当然,为了使其工作,必须使用某种选择器,即:

// This will work
$('body').liveBindTest();

// This WON'T work
$(document.body).liveBindTest();