0

class="pageOpener"いくつかのページを進むと、たくさんの要素があります。jQuery.on('click', ... )イベントが添付されています。特定のページで、先に進む前にいくつかの入力を検証したいのでid="continuebutton"、独自のクリックリスナーを取得します。必要に応じて、ID固有のイベント内からクラス全体のイベントをキャンセルできると思っていましたが、まだ管理できていません。問題の 1 つは、id の前にクラス イベントが発生することだと思います (前に添付されています)。

id イベントを最初に発生させる方法はありますか? コードをこの順序で維持したいのですが、それを行う唯一の方法が をid.on('click', ... )前に置くことである場合は、class.on('click', ... )それを行うことができます。

では、クラス イベントの発生を停止する正しい方法は何でしょうか? true を返しますか?

4

3 に答える 3

1

ドキュメントから.on():

ただし、現在の要素にアタッチされている他のハンドラーはすべて実行されます。それを防ぐには、 を呼び出しますevent.stopImmediatePropagation()。(要素にバインドされたイベント ハンドラーは、バインドされたのと同じ順序で呼び出されます。)

最初に ID ベースのイベント ハンドラーをバインドしclick(最初に実行されるように)、event.stopImmediatePropagation()その関数内で呼び出して、他のクラスベースのclickイベント ハンドラーの実行を停止する必要があります。

于 2013-02-20T14:37:56.993 に答える
1

コードが特定の方法で構造化/バインドされていることに依存できない場合、または誰かが後でこの要件を知らずにコードを変更した場合、構造/シーケンスの変更はそれを壊します。カスタム イベントを使用して同様の問題を解決しました。これらは任意の順序にすることができ、構造に依存しません。たとえば、次のことができます。

$('.pageOpener').on('click', function(){
  // check the ID:
  if ($(this).prop('id') === 'continuebutton'){
     $('#continuebutton').trigger('myCustom');
  }
  else {
     $(this).trigger('myPageOpenerClick');
  }
});
$('.pageOpener').on('myPageOpenerClick', function(){
  // do that page opener stuff here
});

$('#continuebutton').on('myCustom', function(){
  // do that page custom stuff here
  alert('Howdy, handling id stuff');
  //trigger the other event now that stuff above is done:
  $(this).trigger('myPageOpenerClick');
});
于 2013-02-20T14:58:17.420 に答える
0

.off('click') を使用して、クリック リスナーのバインドを解除できます。

公式ドキュメント

アップデート:

このようなこともできます。

$(".your_class").on("click", function(event){
  if($(this).attr("id")=="continuebutton"){
    return false;
  }else{
    //Continue handling the click event
  }

});
于 2013-02-20T14:39:58.777 に答える