1

このアラート コードが 1 回目のクリックで 1 回、2 回目のクリックで 2 回、3 回目のクリックで 4 回、4 回目のクリックで 8 回呼び出される理由を理解するのに苦労しています。

$(document).ready(function() {
    $('#preventClickDiv a[href]').click(function(e){ 
        e.preventDefault();
        alert('Prevented');
        newClick();
    });
});
function newClick(){
    $('#preventClickDiv a[href]').click(function(e){ 
        e.preventDefault();
        alert('Prevented');
        newClick();
    });
}
4

3 に答える 3

7

最初のブロックは、newClick自分自身を呼び出すクリックイベントを作成する呼び出しをクリックイベントを作成します...別のイベントを作成します...あなたはアイデアを得ると思います。関数内のクリック イベント バインディング コードを取り出します。

それは次のようなものでなければなりません:

function newClick(){
    alert("in new click");
}
于 2012-06-28T18:42:09.500 に答える
1

You are binding a click event inside of a click event, so for every time you click, you bind another click event, resulting in a very large number of click events being bound to the same element(s) multiple times on each click.

于 2012-06-28T18:43:44.533 に答える
0

What you're doing is registering an additional click handler every time newClick() is called, not replacing the old one – it doesn't go away just because the event fired. Just do this:

$(document).ready(function() {
    $('#preventClickDiv a[href]').click(function(e){ 
        e.preventDefault();
        alert('Prevented');
    });
});

(Also, preventing users from clicking on links is a good way to generate hate.)

于 2012-06-28T18:44:08.733 に答える