2011-07-08 5 views
4
<script> 
$(function(){ 
    $('.logger').bind('click',function(){ 
     alert('we will log that the user shared something'); 
     return true; //keep going, pretend nothing happened. 
    }); 

    $('.share').bind('click',function(){ 
     window.open('blah'); 
     return false; 
    }); 
}); 
</script> 
<a href="#" class="share logger">Share this</a> 

ロガーと共有機能の両方をトリガーできるようにしたいと考えています。しかし今は、共有機能だけが起動されます。私がシェア関数にコメントすると、ロガー関数は正常に動作します。2クラスのJQueryイベントを作成するにはどうすればよいですか?

ロガーが共有する前に "クラス"を変更しようとしました。

+1

どのブラウザで、あなたはそれをテストしなかったの脆性を高める 偽の意志を返す使用して、イベントの伝播 (バブリング)を停止する を意味しない限り?それはクロムとFirefoxの私のために働いた:http://jsfiddle.net/fjRUY/ –

+0

あなたが投稿したコードは私のために働いています:S –

+0

も私のために働く(クロム)。どこか別の場所で間違いがあるはずです。 –

答えて

1

イベントの伝播を停止するイベントハンドラ内にreturn false;があると、他のハンドラがトリガされないのはそのためです。デフォルトのアクションを停止したいだけなら、event.preventDefault()を使用してください。

  1. event.preventDefault():あなたはそれを呼び出す ときに実際に 3つの非常に別のことをやって、falseを返す

    まずオフです:

    このarticleは、概念を説明する良い仕事をしていません;

  2. event.stopPropagation();
  3. コールバック実行を停止し、すぐに を返します。

「お待ちください 分」と泣きました! 私はただ必要 デフォルトの動作を停止する!私は これらの他の2つの項目が必要ない ...私は思う。

は、デフォルトの動作 をキャンセルするのに必要な3つのアクションの一つは、でpreventDefault()です。あなたが実際に大幅 あなたのコード

+0

私はなぜこの答えがdownvoted理解していません。誰も気にすることはありませんか? –

+0

'return false'は伝播を防ぎますが、同じ要素に対して他のコールバックが起動するのを止めません。 'stopImmediatePropagation'の目的のために使用するべきです – bjornd

+0

はい、これはclunky JQuery docoに埋もれています。私はRaulの最初の段落とほぼ同じ回答を投稿しようとしていました.JQueryのdocoで最初に調べてみると、それは本当に明白ではありません。 falseを返すと 'preventDefault()'と 'stopPropagation()'が返され、 'stopPropagation()'のページには、 'stopImmediatePropagation '存在する*。 – nnnnnn

関連する問題