jQuery单选按钮组的.change方法

17
我正在使用一个表单,其中包含一组单选按钮,每次只能选择一个(单选没有问题)。这些单选按钮中的一个必须在每次选择时触发一个代码,在未选择它时触发另一个代码(选择其他单选按钮时)。我使用 .change 方法并且当你单击它时会触发代码,但是在失去选择时不会触发。我想要切换或者能够知道何时失去选择。
我可以添加代码到其他单选按钮的 .change 方法来实现,但有许多单选按钮集,这将很麻烦,我正在寻找一次性配置。
编辑:
标记是通过ASP MVC Razor引擎创建的,如下所示:
@Html.RadioButtonFor(x => x.SomeModel, new { @class = "special-radio" })
@* Other radios but without the 'specia-radio' class *@

js:

// logging
$(function(){
  $('.special-radio').change(function(){
    console.log('change');
  });
});

只有在单击“特殊单选按钮”时,才会更改字符串。

3个回答

4

当无线电未选中时不会触发任何事件,因为这是多余的。请改用以下方法:

http://jsfiddle.net/hmartiro/g4YqD/1/

它在一组电台上放置了一个更改事件,并在选择的电台是特殊的情况下触发一个事件,否则触发另一个事件。


它并不完全适用于我的问题,因为我有多组单选按钮,但这是一个很好的起点。 - loki
1
如果想要单独选出一组,请使用 $('input[name=foo]') - Hayk Martiros

3
如果无法为其添加类,则可以使用带有标识符的容器来管理这些单选按钮。这样,您就可以隔离更改事件。 演示代码
var prev_data;
$('#special_radios input').change(function(){
    var me = $(this);
    //running function for check
  $('#log').html('<p>firing event for check: '+ me.attr('id') +'</p>');
    if(prev_data)
      uncheck_method(prev_data);  
  prev_data = me;
});

//@param obj = jquery raidio object
function uncheck_method(obj){
    $('#log').append('<p>firing event for uncheck: '+obj.attr('id')+'</p>');
    obj.prop('checked', false) 
    //console.log($('#special_radios input:checked'));
}

​

html

<input type="radio" name="zz" id="5"/>
<div id="special_radios">
   <input type="radio" name="rx" id="1"/>
   <input type="radio" name="ry"  id="2" />
   <input type="radio" name="rz" id="3"/>
   <input type="radio" name="ra"  id="4"/>
</div>
<div id="log"></div>

0

简单的解决方案

var newValue; // vale of checked radio button
var oldValue; // value of unchecked radio button

$('.special-radio').change(function(){
    oldValue = newValue;
    newValue = $(this).val();
});

如果 oldValue 和 newValue 相同,那就意味着它没有被取消选中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接