2016-03-08 161 views
-2

我有一个HTML按钮并单击与其关联的事件。该事件发生多次。我试过.off & .unbind也。单击多次触发事件

$("div.onoffswitch").off().on("click", function() { 
 
    alert("clicked"); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.2/jquery.min.js"></script> 
 
<div class="onoffswitch"> 
 
    <input type="checkbox" name="onoffswitch" class="onoffswitch-checkbox" id="myonoffswitch" checked> 
 
    <label class="onoffswitch-label" for="myonoffswitch"> 
 
    <span class="onoffswitch-inner"></span> 
 
    <span class="onoffswitch-switch"></span> 
 
    </label> 
 
</div>

UPDATE:从原来的问题并不清楚,但这样做的时候存在label(从问题的代码丢失)内的文本发生。

+2

无法重现该问题与提供的代码:https://jsfiddle.net/e1eesekn /。您能否请您在http://jsfiddle.net –

+0

中显示问题的工作示例,该按钮在哪里? – RRR

+0

当使用复选框我建议使用'.change()' – guradio

回答

2

当点击label for(在一个额外的范围内或不是)内的文本时,就会出现问题,它会为复选框引发一个点击事件 - 然后它会传播/冒泡到包含div。

label for允许您将复选框与相关文本链接在一起 - 单击文本并将复选框切换。

你有两个选择:

  • 不使用label for的文字+复选框
  • 链接不上包含div

使用一个事件如果你想以允许额外的点击来改变文本框(例如用图像),然后不要使用label for。但请记住,如果您然后使用该事件切换,则单击该复选框本身将会切换 - 因此会出现所有新问题。

如果你试图找到时复选框更改,使用label for上的复选框changed()事件(不是DIV)

+0

感谢您的回答和解释。完美工作! –