2014-02-28 42 views
0

我希望執行以下操作: 創建一個列表(ul和li)。然後在ul點擊時,我想根據條件插入div,即如果選擇checkbox,則創建帶有4個複選框的divjquery:事件處理程序多次調用

如果從列表中選擇radio,則使用4個無線電創建div

以下是我的jQuery代碼:

var addDiv=document.createElement("div"); 

    $("#id-ul").click(function(){$('#sidr-bottom').hide(); 
    var div_id=0; 
    addDiv=document.createElement("div"); 
    $("#A_MULTI").on("click", { divId:addDiv }, myHandler); 
    $("#A_RADIO").on("click", { divId:addDiv }, myHandlerRadio); 
    addDiv.id = "div_multi"+div_id; ... 

複選框處理器:

function myHandler(event) { 
    alert("check : "+ event.data.divId);} 

無線電處理器:

function myHandlerRadio(event) { 
    alert("radio:"+ event.data.divId);} 

現在的問題是,當我在checkbox單擊列表for first timemyhandler未被調用。

當我再次單擊它時,處理程序會被調用一次。

當我再次單擊它時,處理程序會被調用兩次。

這種奇怪的行爲是什麼原因?

請讓我知道我該如何解決這個問題。

編輯:

我向外移動#id-ul點擊下面的2行。

$("#A_MULTI").on("click", { divId:addDiv }, myHandler); $("#A_RADIO").on("click", { divId:addDiv }, myHandlerRadio); 我仍然面臨同樣的問題。

回答

1

這是因爲您每次單擊#id-ul時都要分配事件處理程序。

請將您的事件移至事件處理程序之外。

+0

但如何將傳遞給處理程序的div? div是#id-ul點擊。請告訴我。 – z22

+0

@ z22是否要爲每個事件處理程序傳遞不同的數據?因爲你正在創建div事件類型'click'事件被觸發 –

+0

是的,其實我想每次都通過新的div – z22

0

問題是,您正在添加處理程序而不清除它們。您應該這樣做:

$("#A_MULTI").off("click").on("click", { divId:addDiv }, myHandler); 
    $("#A_RADIO").off("click").on("click", { divId:addDiv }, myHandlerRadio); 

在分配新處理程序之前刪除舊處理程序。