2012-05-03 5 views
2

私はこの機能を使用してhiperlinkを無効にしましたが、私は本当に機能が何をするのか理解していないが、私の疑問は、私はこの機能を持って、次の1ですリンクは別のクリックハンドラを持っている、と私はその後、どのハンドラ??と呼ばれる新しいものを、結合した場合理解.bind()はjQueryの

function disableButton(f) 
{ 
    if(f) 
    { 
    $('.btnOk[id!="link_lkDelete"]').each(function(){ 
      $(this).bind("click",bindPrevent); 
     }); 
    } 
    else 
    { 
    $('.btnOk[id!="link_lkDelete"]').each(function(){ 
      $(this).unbind("click",bindPrevent); 

     }); 
     } 
} 

質問は、JQはのようなものを使用している:ユーザーがリンクをクリックしたときに、私はこれを行いますハンドラをスタックし、上位1つのハンドラを実行しますか?

+2

jQuery 1.7以降、.on()メソッドは、イベントハンドラをドキュメントに添付するのに適したメソッドです。 – j08691

答えて

1

は、両方のハンドラが呼び出されます、述べています。ここにはfiddleがあります。

2

リンクに別のクリックハンドラがあり、新しいハンドラがバインドされていて、どのハンドラが??と呼ばれている場合、JQはハンドラスタックのようなものを使用し、先頭のハンドラを実行しますか?

短い答えは、両方とも呼び出されていることです。彼らは割り当てられた順序で呼び出されます。

スキンの下では、jQueryはイベントアタッチにjavascriptのデフォルトのメカニズムを使用しており、すべてのブラウザで確実に動作するようにフェッチしています。

+0

「居眠り」は私が住んでいる地域で「嘔吐」です。代わりにそれを "手書き"などに変更したいかもしれません;) – Bojangles

2

jqueryは、イベントに関連付けられたすべてのハンドラを実行します。

これはあなたがそのデフォルトのアクションをやってから、イベントを停止しているのpreventDefaultを使用して、本当に良い説明http://jqfundamentals.com/#chapter-5

あり、この場合には、ハイパーリンク

1

まず以下に、私は(.on使用してお勧めします)は、バインドメソッド(バインド、ライブなど)をすべて置き換えることを意図しているため、.bind()の代わりに.bind()を使用します。 'mouseenter')、それが発生したときにそれにアタッチする関数を実行します。

また、return falseを使用すると、 preventDefault()は必要ありません。 return falseはpreventDefaultとstopPropagationの両方として機能するためです。あなたはまた、上記のように書くことができ

:他の人と同様に

function disableButton(f) 
{ 
    if(f) 
$('.btnOk[id!="link_lkDelete"]').click(function(){ 
      return false; 
     }); 
}