2014-02-28 38 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); 

在分配新处理程序之前删除旧处理程序。