2

この概念に関する記事がすでにたくさんあることは知っていますが、私の質問には少し違いがあります。

私のページには、リンクがあります:

<a id="mylink">click me </a>

次に、次を使用して href を動的に変更しています。

$get('mylink').href = 'javascript:doSomething(id);';

上記のコードを複数回呼び出さなければならない場合があるため、href 属性の現在の値を、異なる id パラメータで同じ関数を呼び出す JavaScript コードで上書きします。

上記は、私が長い間使用しているものです。しかし、ブラウザウィンドウを閉じたときにユーザーに警告するために OnNavigateAway を実装しようとしているときに、少し前に混乱が始まりました。IE は、ユーザーが href 属性の値を持つアンカーをクリックしたときにも、この onNavigateAway イベントをトリガーします。

そこで、これらの href を jquery クリック イベントに置き換え始めました。

$("#mylink").click(function (e) {
doSomething(id);
e.preventDefault();
});

ただし、このコードは複数回呼び出すことができるので、最初にクリック イベントのバインドを解除してから、再度バインドする必要があることに注意してください。

function completed(result) { 
$("#mylink").unbind('click'); 
    $("#mylink").click(function (e) {
    doSomething(result.id);
    e.preventDefault();
    });
}

これは私のJavaScriptを処理する良い方法ですか? それとも、このバインディングとアンバインドは良い習慣ではありませんか?

これを行う別の方法は、onclick 属性を JavaScript で手動で上書きすることです。

これをどのように処理しますか?

お返事をお待ちしております。

4

1 に答える 1

4

ここでは別のロジックを使用します。クリック イベントを再割り当てする代わりに、いくつかのデータ プロパティを変更し、「グローバル」クリック イベントでこのプロパティを使用します。

$("#mylink").on("click", function (e) {
    doSomething($(this).data("id"));
    e.preventDefault();
});

id次に、そのようなコードを変更する必要がある場合:

$("#mylink").data("id", id);

このようにして、データを変更するための呼び出しを繰り返すと、最後のものだけが影響を受けます。

$("#mylink").data("id", 5);
$("#mylink").data("id", 6);
$("#mylink").data("id", 7);

クリックすると、関数に 7 が渡されます。

ライブ テスト ケース

要素が動的に作成され、jQuery 1.7 以降を使用していると仮定すると、 を使用し.onて動的に作成された要素をキャッチすることもできます。

$("body").on("click", "#mylink", function (e) {
    doSomething($(this).data("id"));
    e.preventDefault();
});
于 2012-04-17T10:55:25.450 に答える