在javascript中单击radiobutton时获取回调的最佳方法

在javascript中单击radiobutton时获取回调的最佳方法,javascript,Javascript,我有如下HTML: <input type="radio" name="v" value="1"> 1<br> <input type="radio" name="v" value="2"> 2<br> <input type="radio" name="v" value="3" checked> 3<br> 我想知道如何监控所有这些单选按钮。我可以有三个以上 我考虑的一件事是为所有这些函数都提供一个onclick函数。这

我有如下HTML:

<input type="radio" name="v" value="1"> 1<br>
<input type="radio" name="v" value="2"> 2<br>
<input type="radio" name="v" value="3" checked> 3<br>
我想知道如何监控所有这些单选按钮。我可以有三个以上


我考虑的一件事是为所有这些函数都提供一个onclick函数。这是正确的方法,还是当单选按钮集发生更改时,有一种更简洁的方法来注册公共javascript函数?

您可以向这些元素的父元素添加事件侦听器。事件在DOM树上冒泡,因此您只需要附加一个处理程序


请参见此处的示例:

您可以将事件侦听器添加到这些元素的父级。事件在DOM树上冒泡,因此您只需要附加一个处理程序

请参见此处的示例:

这是使用jquery可以做到的


除了Markandey的注释之外,使用jquery也可以这样做:如果使用jquery,那么可以使用属性选择器而不是类名,而不需要太多麻烦,这样代码就最少了

$input[name=v]。单击我的回调

在mycallback函数中,“this”将引用已单击的元素

e、 g

将onclick属性放在每个元素上会导致维护困难。它还防止您将HTML和JavaScript视为单独的层(数据层和行为层),就像CSS是您的表示层一样

监听事件是开发JavaScript的一种更成熟的方法。最初需要一点习惯,因为单从元素上看,当您单击它时,某些功能将被触发已经不再明显,但您很快就会找到解决方法,更好地组织和注释代码


编辑,因为我看到我没有将“this”转换为jquery对象,并且当您在回调中时,“this”是本机DOM对象,因此.val不起作用。

除了Markandey的注释之外:如果您使用jquery,您可以使用属性选择器而不是类名,而无需太多麻烦,这样您就可以使用最少的代码

$input[name=v]。单击我的回调

在mycallback函数中,“this”将引用已单击的元素

e、 g

将onclick属性放在每个元素上会导致维护困难。它还防止您将HTML和JavaScript视为单独的层(数据层和行为层),就像CSS是您的表示层一样

监听事件是开发JavaScript的一种更成熟的方法。最初需要一点习惯,因为单从元素上看,当您单击它时,某些功能将被触发已经不再明显,但您很快就会找到解决方法,更好地组织和注释代码


编辑,因为我看到我没有将“this”转换为jquery对象,并且当您在回调中时,“this”是本机DOM对象,因此.val无法工作。

您可以将jquery添加类用于每个收音机,例如RadioClass将jquery文件添加到页面并使用下面的代码

$(document).ready(function() {
    $('.RadioClass').click(function () { 
        alert($(this).val());
    });
});

您可以使用Jquery将类添加到每个收音机,例如RadioClass将Jquery文件添加到页面,并使用下面的代码

$(document).ready(function() {
    $('.RadioClass').click(function () { 
        alert($(this).val());
    });
});
这是一篇类似的文章,提供了一个很好的解决方案,即如何为所有这些功能提供一个“onclick”函数

下一段代码对您很有用:

document.onclick = myRadioButtonOnClickHandler;

function myRadioButtonOnClickHandler(e) {
    var realTarget = e ? e.target : window.event.srcElement;
    if (realTarget.nodeName.toLowerCase() === 'input' && realTarget.type === 'radio' ) {
        doSomething(); 
    } 
}
希望对您有所帮助。

这是一篇类似的文章,提供了一个很好的解决方案,即如何为所有这些功能提供一个“onclick”函数

下一段代码对您很有用:

document.onclick = myRadioButtonOnClickHandler;

function myRadioButtonOnClickHandler(e) {
    var realTarget = e ? e.target : window.event.srcElement;
    if (realTarget.nodeName.toLowerCase() === 'input' && realTarget.type === 'radio' ) {
        doSomething(); 
    } 
}

希望能有所帮助。

问题是:最好的方法是什么?换句话说,只添加一个处理程序是否比注册尽可能多的onclick函数更好?在本例中,我唯一不同的做法是使用“更改”事件而不是“单击”@Lx1更好的方法取决于需要和口味。没有明确的答案,但在这种情况下,要处理一组单选按钮,一个处理程序肯定比许多好。@scunliffe:Mmh确实,在Firefox中不起作用@LX1:如果你有很多单选按钮,你必须添加尽可能多的事件侦听器,这会占用更多的内存。问题是:最好的方法是什么?换句话说,只添加一个处理程序比注册尽可能多的onclick函数好吗?在这个示例中,我唯一要做的不同之处是使用“change”事件而不是“click”@Lx1什么更好取决于需要和口味。没有明确的答案,但在这种情况下,要处理一组单选按钮,一个处理程序肯定比许多好。@scunliffe:Mmh确实,在Firefox中不起作用@LX1:如果你有很多单选按钮,你必须添加尽可能多的事件侦听器,这会占用更多的内存。也许你应该在这里提到你使用了jQuery。也许你应该在这里提到你使用了jQuery。我讨厌这个。不是每个人都使用JQuery。我讨厌这个。不是每个人都使用JQuery。