2011-07-29 13 views
6

このデリゲートイベントは、2回発砲しています(必ずしもそうでない場合もあります)。イベント発射を2回代行する

client.bindButtonClickFunction = function(){ 

    $("#client-plugin").delegate(".client-button", "click", function() 
    { 
     var id = this.id.split('-')[2]; 
     client.retrieveMessageByID(id); 
    }); 
}; 

すべての ".client-button"を挿入した後に関数を呼び出します。

これを停止する方法についてのご意見はありますか?私はevent.stopPropagation()を試して、undelegatingとre-delegatingを無駄にしました。

これはChromeプラグインの一部としてChromeにあります。

+1

が困難即時伝搬を停止する必要があります。おそらく 'bindButtonClickFunction'を2回呼びます... btw。 '.client-button'が挿入されるのを待つ必要はなく、' delegate'は 'live'のように動作します。 –

+3

stopImmediatePropagationを試しましたか? http://api.jquery.com/event.stopImmediatePropagation/ – exoboy

+0

私はちょうど私が持っていた2回の発砲問題を修正しました。 @FelixKlingのように、私はいくつかの$(document).ready()関数の中にdelegate()宣言を持っていました。 –

答えて

20

あなたはデリゲートを登録する方法に応じて、あなたがやりたいことがあります

$("#client-plugin").undelegate('event').delegate('event', ...) 

また、あなたのハンドラからreturn falseを追加しよう。

+1

同じ答えがありますか。私はこれを行うことをお勧めし、再びそれが2回呼び出されるかどうかを確認するために再度テストします - もしそうであれば、メソッド自体ではなく、メソッドが2回呼び出されたときに問題が発生します。 – jammypeach

+0

@mrchief:私は同じ問題を抱えています。つまり、私は関数をトリガしています。トリガされたクラスは自分のコードで2回宣言されています。そのクラスをクリックするとトリガが2回発生し、 falseの場合、私のチェックボックスはチェックされません。他の解決方法を教えてください。 – Suleman

+0

@Suleman: 'UnDelegate'もあなたのケースで動作するはずです。 2回目のインスタンス化では、登録を解除してハンドラを一度登録する必要があります。さらに質問がある場合は、新しい質問を開き、コードを投稿してください。 – Mrchief

7

あなたはより詳細な情報なしに言って

$("#client-plugin").on(".client-button", "click", function (e) { 
    e.stopImmediatePropagation(); 
    var id = this.id.split('-')[2]; 
    client.retrieveMessageByID(id); 
}); 
+0

のようなhttp://stackoverflow.com/a/14813418/3786343 – Kamlesh

関連する問題