以下是代码:
<label onclick="event.stopPropagation(); alert(event.target.innerHTML);">
<button>
button
</button>
<span>
span
</span>
</label>
(和小提琴:http://jsfiddle.net/YsYKq/1/)
如果单击该按钮,则只会提醒button
,但是在跨度时 - span
和button
都会收到警报 - 因此onclick
函数会被调用两次
我该怎样防止这种情况?我只需要调用onclick
一次。
答案 0 :(得分:5)
event.preventDefault();
而不是event.stopPropagation();
触发onclick
。 jsFiddle上的演示。
答案 1 :(得分:3)
请尝试以下代码我正在编辑您的代码并更改&#34; stopPropagation&#34; to&#34; preventDefault&#34;。
<label onclick="event.preventDefault(); alert(event.target.innerHTML);">
<button>
button
</button>
<span>
span
</span>
</label>
答案 2 :(得分:0)
@BenM的建议完美但是如果你仍然想要使用封闭按钮和跨度那么这就是...
<label for="notExistingId" onclick="event.stopPropagation(); alert(event.target.innerHTML);">
<button>
button
</button>
<span>
span
</span>
只需在标签中提供'for'值,其ID不存在。
希望有所帮助......
答案 3 :(得分:0)
...当用户点击iscroll ...
中的任何项目时,click事件会被触发两次答案 4 :(得分:0)
我使用标签和复选框的不同id字段解决了这个问题 - 然后测试event.target.label标签脚本
function selectIconElement(elem,event){
if(event.target.id.indexOf('label')>0){
//do something if its label
}else{
//do something if not label
}
}