jQuery.live()不在插件中工作

时间:2010-02-19 22:30:34

标签: jquery plugins bind live

我正在编写插件,需要实时绑定点击。当我进行正常的点击绑定时插件工作正常,但不是实时绑定。

我已经将插件简化为基础知识:

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

当我在链接上调用插件函数时,只有click会打印到我的控制台。

为了live()工作,我该怎么做?感谢。

5 个答案:

答案 0 :(得分:3)

这在插件之外没有解决方法:

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

$('a').liveBindTest();

答案 1 :(得分:1)

您有2 click个事件绑定到单个对象的任何特殊原因?第二个绑定将覆盖live绑定,因此live将永远不会被触发。

答案 2 :(得分:1)

在仔细思考之后,我意识到在现有DOM元素上调用live是没有意义的,因为它已经在DOM中。

Trick是在调用插件时使用live

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

答案 3 :(得分:1)

我觉得这很有用(jQuery 1.5.2):

(function($) {
$.fn.clickTest = function () {
    return this.each(function() {
        $('.clicker').die('click').live('click', function() {
            console.log('clicked');
        });
        $(this).click(function() {
            $('body').append('<a href="#" class="clicker">click here '+$(this).attr('id')+'</a><br> ');

        });
    });
}; }) (jQuery);

答案 4 :(得分:0)

我认为这不是一个好的观点。 现在假设您的插件是一种灯箱,并且它希望将元素锚定在DOM中。 通常在dom准备就绪时你会做类似

的事情
$(dom_elements).myplugin();

如果您通过jsor ajax将某些链接添加到您的网页,该怎么办? 我不认为使用你的

重新绑定
$('a').live('click', function(){ $(this).liveBindTest(); });

将是正确的方式!它会起作用但说实话我不认为这将是一个“最佳实践”。 真正的问题是,使用jQuery 1.4.2,实时事件委托正在等待一个字符串('a.test')而不是一个对象(这个)。它可能是一个jQuery 1.4.2错误吗?