如何检测单选按钮列表的更改

时间:2011-04-15 11:38:48

标签: javascript jquery

<ul id='theList'>
<li><input type='radio' name='foo' val='1' /></li>
<li><input type='radio' name='foo' val='2' /></li>
<li><input type='radio' name='foo' val='3' /></li>
<li><input type='radio' name='foo' val='4' /></li>
<li><input type='radio' name='foo' val='5' /></li>
</ul>

我想在选择一些无线电输入时显示警报('hi')。 我试过这个:

$(function(){
   $('#theList input[type="radio"]').live('change', function(){
      alert('hi');
   });
});

它不起作用。 (我使用直播,因为我通过ajax更改了ul的内容)

5 个答案:

答案 0 :(得分:1)

使用.die(),这样就不会将多个点击事件堆叠到无线电中。此外,它是您需要的“点击”事件,而不是“更改”。

$(function(){
   $('#theList input[type="radio"]').die().live('click', function(){
      alert('hi');
   });
});

答案 1 :(得分:1)

你的'change'事件处理程序可能没有被正确绑定。当您动态更改要绑定的元素时,live()并不总是有效。

只是为了测试,试试ajaxComplete()

类似的东西:

$('#theList').ajaxComplete(function(){
   <!-- attach change event -->
});

答案 2 :(得分:0)

你也可以在你的ajax中选中复选框时使用.trigger()。

我编写了一个示例,点击链接会触发更改:

<强>的jQuery

$('#click').click(function(){
    $('#theList input[val="2"]').click().trigger('contentchanged')
});

$('#theList input[type="radio"]').bind('contentchanged', function() {
  alert('hi');
});

在jsfiddle上查看它 - http://jsfiddle.net/HQs8g/

希望这有助于Alex

答案 3 :(得分:0)

您可以改为将事件绑定到父元素,这样,无论标签是第一次加载还是来自服务器添加,它都将捕获内部任何input[type="radio"]标签的change事件。到DOM:

$(function(){
   $('#theList').on('change', 'input[type="radio"]', function(){
      console.log("hi: ", $(this).val())
   });
});

此外,请注意,您的输入应设置其value属性,而不是val。例如:

<input type='radio' name='foo' value='1' />

答案 4 :(得分:0)

您可以尝试这个简单的jquery事件,该事件在用户单击单选按钮时触发。

 $(document).on('change', '#theList li input', function() {
     alert('hi');
   });

只要有人单击单选按钮,就会触发此事件