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

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 に答える
1

click2 つのイベントを 1 つのオブジェクトにバインドしている特定の理由はありますか? 2 番目のバインドはバインドを上書きするliveため、liveは起動しません。

于 2010-02-20T02:21:03.783 に答える
0

よくない視点だと思います。ここで、プラグインが一種のライトボックスであり、要素を DOM 内に固定しようとしているとします。通常、dom の準備ができたら、次のようなことを行います。

$(dom_elements).myplugin();

jsor ajax を介してページにいくつかのリンクを追加するとどうなりますか? あなたを使って再バインドするとは思わない

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

正しい方法になるでしょう!うまくいくでしょうが、実を言うと、それが「ベストプラクティス」になるとは思いません。本当の問題は、jQuery 1.4.2 では、ライブ イベントの委譲がオブジェクト (this) ではなく文字列 ('a.test') を待っていることです。jQuery 1.4.2 のバグでしょうか?

于 2010-03-24T11:56:00.450 に答える