label包裹著input,給label加點(diǎn)擊事件會(huì)響應(yīng)兩次
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <label for="innerIpt1"><input id="innerIpt1" type="checkbox"/>label1 </label><input id="innerIpt2" type="checkbox"/> <label for="innerIpt2" id="label2">label2 </label> <script>var label1 = document.querySelector("label"); var label2 = document.querySelector("#label2"); var input1 = document.querySelector("#innerIpt1"); var input2 = document.querySelector("#innerIpt2");label1.addEventListener("click", function() { console.log("label1"); }, false); input1.addEventListener("click", function(e) { // e.stopPropagation() console.log("input1"); }, false);label2.addEventListener("click", function() { console.log("label2"); }, false);input2.addEventListener("click", function(e) { e.stopPropagation() console.log("input2"); }, false); </script> </body> </html>
點(diǎn)擊label1的時(shí)候,console輸出:
label1
input1
lable1
我覺(jué)得是這樣的 label
標(biāo)簽與 input
相關(guān)聯(lián),點(diǎn)擊 label
就相當(dāng)于點(diǎn)擊了 input
標(biāo)簽。然后流程是這樣的 1.點(diǎn)擊 label
執(zhí)行本身的事件 輸出 label1
2.因?yàn)辄c(diǎn)擊 label
就相當(dāng)于點(diǎn)擊了 input
標(biāo)簽,所以執(zhí)行 input
上的事件 輸出 input1
3.因?yàn)?label
包含了 input
,所以事件向上冒泡 執(zhí)行 label
事件 輸出 label1
。