如何在更改事件中使用收音机?

Posted

技术标签:

【中文标题】如何在更改事件中使用收音机?【英文标题】:How to use radio on change event? 【发布时间】:2012-10-20 14:45:36 【问题描述】:

我有两个单选按钮 在更改事件上我想要更改按钮这怎么可能? 我的代码

<input type="radio" name="bedStatus" id="allot" checked="checked" value="allot">Allot
<input type="radio" name="bedStatus" id="transfer" value="transfer">Transfer

脚本

<script>
    $(document).ready(function () 
        $('input:radio[name=bedStatus]:checked').change(function () 
            if ($("input[name='bedStatus']:checked").val() == 'allot') 
                alert("Allot Thai Gayo Bhai");
            
            if ($("input[name='bedStatus']:checked").val() == 'transfer') 
                alert("Transfer Thai Gayo");
            
        );
    );
</script>

【问题讨论】:

如果条件都与“分配”进行比较,则将其更改为转移..它工作正常.. 我相信if($("input[name='bedStatus']:checked").val() == 'allot')可以写成if($("input[name='bedStatus']").val() == 'allot') 【参考方案1】:

将类“pnradio”添加到单选按钮, 然后用 .attr('id') 切换

<input type="radio" id="sampleradio1" class="pnradio" />
<input type="radio" id="sampleradio2" class="pnradio" />
    $('.pnradio').click(function() 
          switch ($(this).attr('id')) 
            case 'sampleradio1':
              alert("xxx");
              break;
            case 'sampleradio2':
              alert("xxx");
              break;
          
        );

【讨论】:

【参考方案2】:

简单的ES6 (仅限javascript解决方案。

document.forms.demo.bedStatus.forEach(radio => 
  radio.addEventListener('change', () => 
    alert(`$document.forms.demo.bedStatus.value Thai Gayo`);
  )
);
<form name="demo">
  <input type="radio" name="bedStatus" value="Allot" checked>Allot
  <input type="radio" name="bedStatus" value="Transfer">Transfer
</form>

【讨论】:

【参考方案3】:
$(document).ready(function () 
    $('input:radio[name=bedStatus]:checked').change(function () 
        if ($("input:radio[name='bedStatus']:checked").val() == 'allot') 
            alert("Allot Thai Gayo Bhai");
        
        if ($("input:radio[name='bedStatus']:checked").val() == 'transfer') 
            alert("Transfer Thai Gayo");
        
    );
);

【讨论】:

【参考方案4】:

上述答案的改编...

$('input[type=radio][name=bedStatus]').on('change', function() 
  switch ($(this).val()) 
    case 'allot':
      alert("Allot Thai Gayo Bhai");
      break;
    case 'transfer':
      alert("Transfer Thai Gayo");
      break;
  
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="radio" name="bedStatus" id="allot" checked="checked" value="allot">Allot
<input type="radio" name="bedStatus" id="transfer" value="transfer">Transfer

http://jsfiddle.net/xwYx9

【讨论】:

使用'on'和上面的答案有什么区别? @okenshield .on() 确实在上述方面有所收获,但是,当考虑到动态选择器时,它肯定是 jQuery 1.7+ 中的唯一方法 @Ohgodwhy - on 当您为事件委托提供上下文时,甚至为动态选择器提供上下文时,如您所说,但您编写它的方式与上述答案完全相同。 【参考方案5】:

如果单选按钮是动态添加的,你可能希望使用这个

$(document).on('change', 'input[type=radio][name=bedStatus]', function (event) 
    switch($(this).val()) 
      case 'allot' :
        alert("Allot Thai Gayo Bhai");
        break;
      case 'transfer' :
        alert("Transfer Thai Gayo");
        break;
         
);

【讨论】:

【参考方案6】:

您可以使用 this 引用当前的 input 元素。

$('input[type=radio][name=bedStatus]').change(function() 
    if (this.value == 'allot') 
        alert("Allot Thai Gayo Bhai");
    
    else if (this.value == 'transfer') 
        alert("Transfer Thai Gayo");
    
);

http://jsfiddle.net/4gZAT/

请注意,您在 if 语句中将值与 allot 进行比较,:radio 选择器已弃用。

如果您不使用 jQuery,可以使用 document.querySelectorAllhtmlElement.addEventListener 方法:

var radios = document.querySelectorAll('input[type=radio][name="bedStatus"]');

function changeHandler(event) 
   if ( this.value === 'allot' ) 
     console.log('value', 'allot');
    else if ( this.value === 'transfer' ) 
      console.log('value', 'transfer');
     


Array.prototype.forEach.call(radios, function(radio) 
   radio.addEventListener('change', changeHandler);
);

【讨论】:

【参考方案7】:
document.addEventListener('DOMContentLoaded', () => 
  const els = document.querySelectorAll('[name="bedStatus"]');

  const capitalize = (str) =>
    `$str.charAt(0).toUpperCase()$str.slice(1)`;

  const handler = (e) => alert(
    `$capitalize(e.target.value) Thai Gayo$e.target.value === 'allot' ? ' Bhai' : ''`
  );

  els.forEach((el) => 
    el.addEventListener('change', handler);
  );
);

【讨论】:

【参考方案8】:

使用onchage功能

<input type="radio" name="bedStatus" id="allot" checked="checked" value="allot" onchange="my_function('allot')">Allot
<input type="radio" name="bedStatus" id="transfer" value="transfer" onchange="my_function('transfer')">Transfer

<script>
 function my_function(val)
    alert(val);
 
</script>

【讨论】:

【参考方案9】:
<input type="radio" name="radio"  value="upi">upi
<input type="radio" name="radio"  value="bankAcc">Bank

<script type="text/javascript">
$(document).ready(function() 
 $('input[type=radio][name=radio]').change(function() 
   if (this.value == 'upi') 
    //write your logic here

    
  else if (this.value == 'bankAcc') 
    //write your logic here
 
 );
 </script>

【讨论】:

【参考方案10】:

更简单、更简洁的方法是使用带有@Ohgodwhy 答案的类

<input ... class="rButton">
<input ... class="rButton">

脚本

​$( ".rButton" ).change(function() 
    switch($(this).val()) 
        case 'allot' :
            alert("Allot Thai Gayo Bhai");
            break;
        case 'transfer' :
            alert("Transfer Thai Gayo");
            break;
                
);​

【讨论】:

【参考方案11】:
$(document).ready(function () 
    $('#allot').click(function () 
        if ($(this).is(':checked')) 
            alert("Allot Thai Gayo Bhai");
        
    );

    $('#transfer').click(function () 
        if ($(this).is(':checked')) 
            alert("Transfer Thai Gayo");
        
    );
);

JS Fiddle

【讨论】:

使用this.checked 代替$(this).is(":checked")。它是纯 JS,因此速度要快得多。

以上是关于如何在更改事件中使用收音机?的主要内容,如果未能解决你的问题,请参考以下文章

如何检测和使用单选按钮取消选择

如何在UnChecked时触发单选按钮的OnChange事件

如何更改蚂蚁设计中的单选按钮颜色?

如何更改 MUI 单选按钮选中的颜色?

如何检测服务和广播接收器中的关键事件

如何在 AngularJS 中使用收音机和复选框绑定到复杂对象?