多个单选按钮组的事件监听器

时间:2015-04-20 18:41:39

标签: javascript jquery html css

如何让动态Javascript / JQuery事件监听器知道单击哪个单选按钮组并检索已检查元素的值。例如,如果我有两个单选按钮组,我怎么知道哪一个被点击?如何为动态数量的按钮组执行此操作?

两个单选按钮组的示例:

<div class="btn-group btn-group-vertical" data-toggle="buttons">
     <input type="radio" name="input1" value="option1"/>
     <input type="radio" name="input1" value="option2"/>
</div>
<div class="btn-group btn-group-vertical" data-toggle="buttons">
     <input type="radio" name="input2" value="option1"/>
     <input type="radio" name="input2" value="option2"/>
</div>

编辑:其他任何人想知道目前为止下面的哪个问题是&#34;更多&#34;是的,两者都是正确的,因为.change(function(e) {.on('click', function(e) {

的快捷方式

编辑2:删除了ID

4 个答案:

答案 0 :(得分:8)

此jquery将执行一个回调,在控制台中打印&#39; clicked&#39;的名称和值。 (未更改)单选按钮。

$('input:radio').on('click', function(e) {
    console.log(e.currentTarget.name); //e.currenTarget.name points to the property name of the 'clicked' target.
    console.log(e.currentTarget.value); //e.currenTarget.value points to the property value of the 'clicked' target.
});

尝试一下: Fiddle

答案 1 :(得分:5)

change事件中找到输入的名称。

$('input:radio').on('change', function(e){
  var name = e.currentTarget.name,
  value = e.currentTarget.value;
            
  $('.name').text(name);
  $('.value').text(value);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="btn-group btn-group-vertical" data-toggle="buttons">
     <input type="radio" name="input1" id="input1" value="option1"/>
     <input type="radio" name="input1" id="input1" value="option2"/>
</div>
<div class="btn-group btn-group-vertical" data-toggle="buttons">
     <input type="radio" name="input2" id="input2" value="option1"/>
     <input type="radio" name="input2" id="input2" value="option2"/>
</div>
<p>Name: <b class="name"></b></p>
<p>Value: <b class="value"></b></p>

答案 2 :(得分:5)

提供纯JavaScript解决方案:为所有无线电类型输入创建一个集合,然后遍历它们,为每个输入添加一个事件监听器。使用this,您可以访问您希望的任何属性或属性,并在必要时访问父元素。

var inputs=document.querySelectorAll("input[type=radio]"),
    x=inputs.length;
while(x--)
    inputs[x].addEventListener("change",function(){
        console.log("Checked: "+this.checked);
        console.log("Name: "+this.name);
        console.log("Value: "+this.value);
        console.log("Parent: "+this.parent);
    },0);

或者,正如您所提到的组数是动态的,您可能需要一个实时节点列表,这需要一些额外的代码来检查input type

var inputs=document.getElementsByTagName("input"),
    x=inputs.length;
while(x--)
    if(inputs[x].type==="radio")
        inputs[x].addEventListener("change",function(){
            console.log("Checked: "+this.checked);
            console.log("Name: "+this.name);
            console.log("Value: "+this.value);
            console.log("Parent: "+this.parent);
        },0);

答案 3 :(得分:0)

  

编辑:对于其他任何想知道下面到目前为止下面哪个问题是&#34;更多&#34;是的,两者都是正确的.change(function(e){是.on的快捷方式(&#39; click&#39;,function(e){

是的,.change(function(e) {.on('click', function(e) {的快捷方式,但是当您使用部分视图(例如在MVC中)时,使用.change(function(e) {页面中的链接或按钮会丢失hiperlink或不能正常工作,所以你必须使用h .on('click', function(e) {才能正常工作。