3

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

我已经将插件归结为基础知识:

(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()工作?谢谢。

4

5 回答 5

3

这无需插件之外的解决方法即可工作:

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

$('a').liveBindTest();
于 2010-10-19T10:59:26.680 回答
1

click您将 2 个事件绑定到一个对象中有什么特别的原因吗?第二个绑定将覆盖live绑定,因此live永远不会触发。

于 2010-02-20T02:21:03.783 回答
1

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

live调用插件时要使用的技巧:

(function($) {
  $.fn.liveBindTest = function() {
    return this.each(function() {
      $(this).click(function(){
        console.log('click');
        return false;
      });
    });
  };
})(jQuery);
$('a').live('click', function(){ $(this).liveBindTest(); });
于 2010-02-20T06:35:10.803 回答
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);
于 2011-04-15T20:02:00.240 回答
0

我认为这不是一个好的观点。现在假设您的插件是一种灯箱,它正在寻找在 DOM 中锚定元素。通常在 dom 准备好的时候,你会做类似的事情

$(dom_elements).myplugin();

如果您通过 jsor ajax 将一些链接附加到您的页面怎么办?我不认为使用你的重新绑定

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

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

于 2010-03-24T11:56:00.450 回答