Javascript 如何为具有多个元素的块钩住一个事件

Javascript 如何为具有多个元素的块钩住一个事件,javascript,events,checkbox,onclick,Javascript,Events,Checkbox,Onclick,我有这个标记: <fieldset class="checkbxr full small" onclick="alert('test')"> <label for="" class="fat_label">Category</label> <input type="checkbox" name="true_checkb" id=""> <span class="dmy_checkb"></span>

我有这个标记:

<fieldset class="checkbxr full small" onclick="alert('test')">
    <label for="" class="fat_label">Category</label>
    <input type="checkbox" name="true_checkb" id="">
    <span class="dmy_checkb"></span>
</fieldset>

类别
这是一个虚拟的解决方案。一切正常,但我需要为整个
fieldset
钩住一个
onclick
事件。因此,如果我喜欢下面的内容,那么对于ISDE中的所有元素,我有3个警报,因此我的事件触发3次。如何仅为
字段集设置此项并进行一次事件调用?谢谢你的帮助


这是对js和一些css的处理:

您需要根据单击的内容取消冒泡事件。。。。 这里有一个脚本来实现这一点(在纯javascript中-在jQuery中更容易实现-例如,您可以检查事件源上是否有类,然后取消它)。此脚本检查单击的标记是否为字段集,如果不是,则取消气泡,如果是弹出警报

拨弄

代码:

HTML:


按预期工作?是的,那么为什么我有3个警报而不是一个?
<fieldset class="checkbxr full small" onclick="javascript:doSomething()">
    <label for="" class="fat_label">Category</label>
    <input type="checkbox" name="true_checkb" id="">
    <span class="dmy_checkb"></span>
</fieldset>
function doSomething(e) {
    var targ;
    if (!e) var e = window.event;
    if (e.target) targ = e.target;
    else if (e.srcElement) targ = e.srcElement;
    if (targ.nodeType == 3) // defeat Safari bug
        targ = targ.parentNode;
    console.log(targ)
    if (targ.tagName!="FIELDSET") {
     cancelBubble(e)   
    } else {
     doMyThing()   
    }
}
function cancelBubble(e) {
 var evt = e ? e:window.event;
 if (evt.stopPropagation)    evt.stopPropagation();
 if (evt.cancelBubble!=null) evt.cancelBubble = true;
}
function doMyThing(){
    alert("this is a test")

}