2013-03-05 180 views
3

下面的代码:onClick函数调用两次

<label onclick="event.stopPropagation(); alert(event.target.innerHTML);"> 
    <button> 
     button 
    </button> 
    <span> 
     span 
    </span> 
</label> 

(与小提琴:http://jsfiddle.net/YsYKq/1/

如果一个点击按钮,只button被警告,但在跨时 - 无论是spanbutton被警告 - 所以onclick函数被调用两次。

我该如何预防?我只需要调用onclick一次。

+1

'event.preventDefault();'而不是'event.stopPropagation();'似乎只给出单击的元素。 – Teemu 2013-03-05 09:53:56

回答

5

event.preventDefault();代替event.stopPropagation();触发onclick仅点击的元件上。演示jsFiddle

3

请尝试下面的代码我正在编辑您的代码并将“stopPropagation”更改为“preventDefault”。

<label onclick="event.preventDefault(); alert(event.target.innerHTML);"> 
    <button> 
     button 
    </button> 
    <span> 
     span 
    </span> 
</label> 
0

建议由@BenM那张完美的,但如果你仍然想使用封闭按钮和跨越然后这里有一个办法......

<label for="notExistingId" onclick="event.stopPropagation(); alert(event.target.innerHTML);"> 
<button> 
    button 
</button> 
<span> 
    span 
</span> 

只是“对”的标签提供的价值带有不存在的ID。

希望它可以帮助..

0

我已经解决了这个使用不同对于标签和复选框id字段 - 然后测试event.target.label的标签脚本

功能selectIconElement(ELEM,事件){

if(event.target.id.indexOf('label')>0){ 
    //do something if its label 
}else{ 
    //do something if not label 
} 

}