簡體   English   中英

jQuery事件冒泡

[英]JQuery event bubbling

我正在構建一個井字游戲,下面是我設置的代碼,讓playerX標記一個盒子,然后切換到玩家O。使用$ .on('click')偵聽哪個盒子是點擊。 我得到了我認為是事件冒泡的信息。 每次單擊一個框時,下一個框都會產生指數反應,依此類推。 我嘗試了e.stopPropogation,但它阻止了下一步。

如何停止反應泛濫?

    function playX () {


     $box.on('click', function (e) {
        console.log(this);
        var a = e.target.dataset.index;
        b[a] = 'X';
        $(this).text('X');
        playO();     
  })
 }
    function playO() {

    $box.on('click', function (e) {
        console.log(this);
        var b = e.target.dataset.index;
        b[b] = 'O';
        $(this).text('O');

        playX();

})
}

這是所有鏈接的鏈接http://jsfiddle.net/shallak/fdctcvdt/

(我也在使用CSS框架Materialise)

您不應該在每次調用playX或playO時都綁定該事件。每次注冊另一個導致您遇到“指數”行為的處理程序時,都不要綁定該事件。 解決問題的最快方法是使用“ $ box.one(...)”而不是“ $ box.on(...)”(這將綁定一次事件並清除處理程序)

無論如何,我可以自由地完善您的實現:

var results = ( function() {
    var currentPlayer = "X"
    var b = new Array(9) // Assumed 'b' was array of played moves

    // "$box" - make sure this one is available by this point
    // or just set it accordingly. 
    $box.on( "click", function(e) {
        var index = e.target.dataset.index;

        // make sure the current index was never played
        if ( index === undefined ) {
           if ( currentPlayer === "X" ) {
               b[index] = "X"
               currentPlayer = "O"
           }
            else {
               b[index] = "O"
               currentPlayer = "X"
            }
        }
    } )

    // Return a reference to the array which holds each squre value 
    return b;
} () )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM