0

コードはサンプルですが、結果はまったく論理的ではないようです。ここにコード:

function lap_validation(event) {
    if (event.srcElement == document.getElementById("Suivant")) {
        console.log("Suivant fired " + event.srcElement);
        document.getElementById("msg").textContent = " Voulez vous vraiment passer à la lettre  suivante ?";
        console.log(document.getElementById("msg").textContent);
        var buyButton = document.getElementById("test");
        document.getElementById("confirmFlyout").winControl.show(buyButton);
        document.getElementById("no").addEventListener("click", function () {
                document.getElementById("confirmFlyout").winControl.hide();
                console.log("hide");

        }, false);
        document.getElementById("ok").addEventListener("click", function () {
            //next();
            //document.getElementById("confirmFlyout").winControl.hide();
            console.log("click on ok from flyout");
        }, false);

    }
}

「Suivant」ボタンをクリックすると、最初に [OK] ボタンをクリックするとフライアウトが表示され、次の出力が得られます。

Suivant fired [object HTMLButtonElement]
Voulez vous vraiment passer à la lettre  suivante ?
click on ok from flyout

2回目をクリックすると:

Suivant fired [object HTMLButtonElement]
Voulez vous vraiment passer à la lettre  suivante ?
click on ok from flyout
click on ok from flyout

第3:

Suivant fired [object HTMLButtonElement]
 Voulez vous vraiment passer à la lettre  suivante ?
click on ok from flyout
click on ok from flyout
click on ok from flyout

フライアウトのボタンの指示を繰り返す理由がわかりません(「いいえ」ボタンをクリックしても同じです)。

どんな助けでも大歓迎です

4

3 に答える 3

3

毎回新しいイベント リスナーを追加しています。最も簡単な修正は変更することです... document.getElementById("ok").addEventListener("click", function () {...document.getElementById("ok").onclick = function() {...

addEventListener の大きな利点は、複数のイベント リスナーを追加できることです。あなたがここで見ることができるように、それはあなたを噛むことができます. 毎回新しいイベント リスナーを追加しています。代わりに onclick を使用すると、毎回イベント リスナーが置き換えられるため、クリック イベントに対して 1 つのイベント リスナーのみが存在します。

于 2013-04-17T13:49:16.673 に答える
0

サンプルではすべての出力に console.log() を使用しているため、この場合の解決策は明らかです。クリックするokたびに呼び出しが行わconsole.log("click on ok from flyout");れ、コンソールに別の行が書き込まれます。

実際のコードで console.log を使用していない場合は、サンプルを提供してください。コードは本来の動作をします。

于 2013-04-17T10:01:41.993 に答える