問題は、のコンテンツを更新すると、div
その中にあったすべての要素(それらにアタッチされたイベントハンドラーを含む)が破棄されることです。コードは、コードが実行された時点で存在する要素にclick
イベントをフックしています。の新しい要素は接続されません。a
div
a
div
あなたの場合、delegate
(実例、withload
)を使用する方が良いでしょう:
$(document).ready(function(){
$(".article div").delegate("a", "click", function(e) {
e.stopPropagation();
});
});
代わりにそれがフックclick
しdiv
ます。クリックが発生すると、リンクからへのバブルが発生しますdiv
。ここで、jQueryによって作成されたクリックハンドラーがクリックを調べて、実際にa
要素のクリックであるかどうかを確認します。その場合、クリックを停止します。
jQuery 1.7以降、新しい推奨構文は次のとおりですon
。
$(document).ready(function(){
$(".article div").on("click", "a", function(e) {
e.stopPropagation();
});
});
引数の順序はとは異なりますがdelegate
、それ以外は同じことを行うことに注意してください。
古いスタイルのDOM0ハンドラー(イベントハンドラー属性)と新しいスタイルのDOM2コード(jQueryにアタッチされたハンドラー)を組み合わせないようにすることをお勧めします。多くのブラウザでは、2つのメカニズムは多少分離されており、希望どおりにうまく機能しない場合があります。
これに関する他の2つのコメント:
onlick="javascript:somefunction();"
- それ
onclick
は、そうではありませんonlick
(あなたはを逃していますc
)
javascript:
イベントハンドラ属性で疑似プロトコルを使用するのではなく、 href
sのみを使用します。その部分を削除するだけです。(なぜエラーが発生しないのですか?純粋に偶然であるため、これは有効なJavaScriptです。使用しないラベルを定義していることになります。)