2013-05-28 79 views
-1

我有嵌套的事件我該如何處理這些嵌套事件?

認爲這是一個問題的html代碼:

<button id="first">first button </button> 

<button id="second">second button </button> 

這是jQuery代碼:

$(document).ready(function() { 
$('#first').click(function() { 
    $('#second').click(function() { 
     alert('test'); 
    }); 
}); 

});

當第一個按鈕被點擊n次...然後單擊第一個按鈕一次..警報顯示n次。

我要處理這個問題:

成爲當點擊第一個按鈕N次......然後在第一個按鈕點擊一次..顯示警報一個

但不使用one()方法

+1

我可以問你爲什麼你嵌套單擊處理? –

回答

0

只需使用off()解除綁定事件:

$(document).ready(function() { 
    $('#first').click(function() { 
     $('#second').off('click').click(function() { 
      alert('test'); 
     }); 
    }); 
}); 
0

你可以做到這一點 -

var isBind = false; 
$('#first').click(function() { 
    if(!isBind){ 
    $('#second').click(function() { 
     alert('test'); 
    }); 
    isBind = true; 
    } 
}); 
0

使用標誌(在線程概念中稱爲鎖)。

東西如:

$(document).ready(function() { 
    var clicked = false; 
    $('#first').click(function() { 
     clicked = true; 
    }); 
    $('#second').click(function() { 
     if(clicked){ 
      alert('test'); 
      clicked = false; 
     } 
    }); 
}); 

由於當window.clicked爲真時才使用第二事件。

我知道,這是醜陋的,但是..它的工作原理,它很容易理解。 (和它支持多個事件偵聽器,只記得改變對象window的屬性的名稱)

+0

請注意,您不必在窗口中定義它,您可以剛剛完成'var clicked = false'並直接在內部使用它,從而消除了全局衝突的可能性。 –

+0

@KevinB在我的一些測試中,發生了與函數的上下文相關的錯誤。在Python中,我知道這很好,但在Javascript中,我更喜歡使用一些全局變量來避免變量值的識別問題。 –

+0

@KevinB順便說一句,我已經根據你的建議修復了代碼。 –