2

この関数を使用してハイパーリンクを無効にしていましたが、この関数が実際に何をするのかよくわかりません。次の関数に疑問があります。この関数があります。

function bindPrevent(e)
 {
    e.preventDefault();
    return false;
 }

そして、ユーザーがリンクをクリックすると、私はこれを行います:

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はハンドラースタックのようなものを使用して、一番上のハンドラーを実行しますか?

4

4 に答える 4

2

問題は、リンクに別のクリックハンドラーがあり、新しいクリックハンドラーをバインドすると、どのハンドラーが呼び出されるかということです。JQはハンドラースタックのようなものを使用して、一番上のハンドラーを実行しますか?

簡単に言えば、両方とも呼ばれているということです。割り当てられた順序で呼び出されます。

スキンの下では、jQueryはイベントの添付にjavascriptsのデフォルトのメカニズムを使用し、すべてのブラウザーで確実に機能するように少し調整します。

于 2012-05-03T15:56:27.913 に答える
2

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

これは本当に良い説明ですhttp://jqfundamentals.com/#chapter-5

PreventDefaultを使用すると、イベントがデフォルトのアクションを実行するのを停止します。この場合は、ハイパーリンクをたどります。

于 2012-05-03T15:59:15.713 に答える
1

まず、.onはすべてのバインディングメソッド(bind、liveなど)を置き換えることを目的としているため、.bind()の代わりに.on()を使用することをお勧めします。

私の知る限り、bindが行うことは、イベント('click'や'mouseenter'など)を監視し、イベントが発生したときにそれにアタッチする関数を実行することです。

また、returnfalseを使用する場合。PreventDefault();は必要ありません。falseを返すと、preventDefaultとstopPropagationの両方として機能するためです。

上記を次のように書くこともできます。

function disableButton(f)
{
     if(f)
$('.btnOk[id!="link_lkDelete"]').click(function(){
            return false;
        });
 }
于 2012-05-03T16:03:59.773 に答える
1

他の人が述べているように、両方のハンドラーが呼び出されます。これがそれを説明するフィドルです。

于 2012-05-03T16:04:07.860 に答える