51

イベント ハンドラを使用して JavaScript 関数を呼び出すボタンがあります。何らかの理由で、イベント ハンドラーが 2 回呼び出されています。

これが私のボタンです(コードを生成するためにphpオブジェクトを使用しているため、空のタグがたくさんあります):

<button name="addToCart" value="" size="" onclick="" src="" class="addToCartButton" id="0011110421111" type="button" formtarget="_self" formmethod="post" formaction="" data-mini="true" width="" height="" placeholder="" data-mini="1" onkeypress="" >Add To Cart</button>

ここに私のイベントハンドラがあります:

$('.addToCartButton').click(function() {
    alert("bob");
    //addToCart($(this).attr("id"));
});

ここで、アラートを 2 回受け取ります。

ボタンの onclick プロパティで関数 addToCart を呼び出してみましたが、そのようにしようとすると、次のエラーが発生します。

TypeError: '[object HTMLButtonElement]' is not a function (evaluating 'addToCart(0011110421111)')

event.preventDefault() と event.stopPropagation() も試しましたが、どちらも機能しませんでした。

なぜこれが起こっているのか、2回実行するのを止めるためにできること、またはonclick = ""からjavascript関数を呼び出すとエラーが発生する理由はありますか?

4

8 に答える 8

15

my_scripts.js と my_scripts.min.js の両方を誤って含めたため、イベントが 2 回発生しました。必ず 1 つだけ含めてください。

于 2015-01-23T23:51:53.173 に答える
0

答えを求めてここに来ました。私のは正確に2回発砲していないことが判明しました。発火し、後で別の何かをクリックすると、そのクリックでも発火します。

クリックリスナーを備えたコンテナdivがありました。その div 内には、クリック可能なリンクがあります。

リンクをクリックすると、コンテナのクリック イベントも発生します。

unbind('click') / rebind の実験に時間を費やしましたが、満足のいくものはありませんでした。最後に、クリック ターゲットがアンカーでない場合にのみ実行されるように、コンテナー クリック イベントに条件を追加しました。

    if (e.target.tagName !== 'A') {    
        alert("bob");
        //addToCart($(this).attr("id"));
    });
于 2021-12-22T18:02:18.673 に答える