0

最近、jQuery を 1.9 にアップグレードしましたが、私の主な問題は、すべての live() メソッドを on() に変換することです。

いくつかの状況で成功しましたが、非常に奇妙な動作をする他の方法がいくつかあります。

以下を例に取ります。

$(document).on('click', '.clickReplace', function(e) {
     e.preventDefault();
     ...
});

クラス「clickReplace」は、「a」、「span」、または「div」タグのいずれかに割り当てることができ、ajax 呼び出しの後に (動的に) DOM に追加される場合があります。

上記を使用すると、このクラスが割り当てられていないページ上のリンクをクリックするたびに e.preventDefault() がトリガーされます-ページ間を移動できません-まるで「ドキュメント」にバインドされているかのように指定されたクラスを持つドキュメント ツリー内の要素よりも。

何が原因で、それを機能させるにはどうすればよいですか?

4

2 に答える 2

1

皆さんに心からお詫び申し上げます - あなたの言う通りです - この動作を引き起こしているのは別の何かがあり、2 番目の引数としてクラス名ではなくクラスを使用してオブジェクトを渡していたことが原因でした (これは内部のメソッドであるため)。どの要素をトリガーするかを示すパラメーターを使用して外部から呼び出されたオブジェクト リテラルの)。

私はこのようにしましたが、これは明らかにうまくいきません:

$(document).on('click', $('.clickReplace'), function(e) {

参加してくれてありがとう。

于 2013-01-30T08:39:55.557 に答える
0

を使用する場合は注意が必要e.preventDefault()です。リンクのクリック イベントのバブリングがブラウザーに到達するのを事実上停止させているため、リンクが応答しなくなります。


コメントに返信 - を使用onすることは、これを行うことと同じです。

$(document).click(function(e){
   if($(e.target).parents(".clickReplace").length>0){
      // run your code
   }
});

バインドしていない要素では実行されないため、問題はここにはありません

于 2013-01-30T08:27:58.047 に答える