首先咱們看下面的代碼片斷(label包裹checkbox)html
<div class="example"><label for="chk_6" class="label-1">選項6<input class="chkbox-1" type="checkbox" id="chk_6" value="1"></label></div> <div class="example"><label for="chk_7" class="label-1">選項7<input class="chkbox-1" type="checkbox" id="chk_7" value="1"></label></div> <div class="example"><label for="chk_8" class="label-1">選項8<input class="chkbox-1" type="checkbox" id="chk_8" value="1"></label></div> <div class="example"><label for="chk_9" class="label-1">選項9<input class="chkbox-1" type="checkbox" id="chk_9" value="1"></label></div> <div class="example"><label for="chk_10" class="label-1">選項10<input class="chkbox-1" type="checkbox" id="chk_10" value="1"></label></div>
// 綁定label的click事件 $('.label-1').click(function (e) { console.log($(this).text()); });
點擊文字,再觀察控制檯咱們會發現一個現象!!(代碼被執行兩次)this
問題緣由:spa
點擊label的時候,事件冒泡一次,同時會觸發關聯的input的click事件,致使事件再次冒泡code
解決方案一(修改html結構label和checkbox同級):htm
<div class="example"><label for="chk_1" class="label-1">選項1</label><input class="chkbox-1" type="checkbox" id="chk_1" value="1"></div> <div class="example"><label for="chk_2" class="label-1">選項2</label><input class="chkbox-1" type="checkbox" id="chk_2" value="1"></div> <div class="example"><label for="chk_3" class="label-1">選項3</label><input class="chkbox-1" type="checkbox" id="chk_3" value="1"></div> <div class="example"><label for="chk_4" class="label-1">選項4</label><input class="chkbox-1" type="checkbox" id="chk_4" value="1"></div> <div class="example"><label for="chk_5" class="label-1">選項5</label><input class="chkbox-1" type="checkbox" id="chk_5" value="1"></div>
刷新界面,點擊文字,再觀察控制檯:blog
OK正常了。事件
解決方案二(修改js代碼綁定checkbox的change事件):get
// 綁定checkbox的change事件 $('.chkbox-1').change(function (e) { console.log($(this).parent().text()); });
刷新界面,點擊文字,再觀察控制檯:input
OK正常了。io
解決方案三(判斷事件來源,若是是input,則阻止):
// 綁定label的click事件 $('.label-1').click(function (e) { if ($(e.target).is("input")) return; console.log($(this).text()); });
解決方案四:
不用label(最簡單直接粗暴的方法)
若是這篇文章對您有幫助,您能夠打賞我
技術交流QQ羣:15129679