2016-03-08 156 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

感謝您的回答和解釋。完美工作! –