2017-01-06 21 views
0

私はJQuery 1.12を使用しています。何らかの理由でクリックハンドラは...私は再びそれを設定する前に、クリックのバインドを解除してるにもかかわらず、二回クリックハンドラーが2回設定されないようにするにはどうすればよいですか?

$styledSelect.unbind('click') 
    console.log("setting click") 
    $styledSelect.click(function(e) { 
    console.log("opened"); 
    e.stopPropagation(); 
    $('div.select-styled.active').each(function() { 
     $(this).removeClass('active').next('ul.select-options').hide(); 
    }); 
    $(this).toggleClass('active').next('ul.select-options').toggle(); 
    }); 

を設定きているが、まだ私はそれを開くために私のメニューをクリックしたとき、あなたは「開かれた」を参照してください。声明は2回印刷されました。私のフィドル - http://jsfiddle.net/6fjnnu55/1/を見てください。誰も私はそれを2回設定しないように私のクリックハンドラを適切に設定する方法を知っていますか?

+1

これは重複ですか?答えは "this.unbind(" click ")"を追加することをお勧めします。これはすでに私が投稿したコードスニペットの最初の行です。 – Dave

+0

いいえ、重複していません。 @Dave:あなたのクリックハンドラに 'console.log(e)'を追加し、実際に別のイベントを処理することを確認してください。最後のものは(自然に)(ユーザーがトリガーした)もので、他のすべてはスクリプト自体によって生成されます。 – raina77ow

+0

はい、そういうわけではありませんが、この質問にのみ基づいており、誰も読んではいけないページやページを含む外部のjsFiddleを使用していないので、それはそうです。あなたは[mcve]を作る方法を学ぶ必要があります。 – DavidG

答えて

2

問題はライン35-36にあるように思わ:

}).focus(function() { 
    $(this).find('.select-styled').click() 

それはあなたが選択ウィジェットをクリックして「フォーカスに」そうです...私は、あなたが焦点にをクリックしたくないのいずれか推測しています

またはそうでないかもしれない、まったく...

UPDATEだからあなたがyの例を区別する必要があるので、私は、本当に助けないだろうと思い示唆したように、イベントを見て、すべての時間OUこれが役に立てば幸い30、39および75

http://jsfiddle.net/6fjnnu55/3/

特にラインで、両方が発射されている場合、それらから一つのイベントを持っている...私は私の更新フィドルを参照してください、このためのフラグ変数を使用したいです!

+0

正確に。その理由は、 'click'ネイティブイベントが、' focus' oneの後に発射されるということです。 – raina77ow

+0

こんにちは@MacPrawn、これを確認していただきありがとうございます。実際には、誰かが要素に到達するために(Tabキーをクリックしたので)フォーカス関数が呼び出されたときに呼び出されるのは、クリックだけの機能です。どのように私は2つを区別することができますか? – Dave

+0

これを遅らせることも、ハンドラ内のイベント自体をチェックすることもできます。トリガされたイベントにはいくつかの違いがあります(最も顕著なものの中にisTriggeredフラグが設定されています)。 – raina77ow

関連する問題