以编程方式单击无线电输入时,jQuery更改不会触发

时间:2016-06-27 13:17:06

标签: javascript jquery

我有一些type =“radio”的输入:

<div style="margin:10px;"><input type="radio" name="cei" id="clike" /><label style="margin:0 10px" for="clike">like</label></div>
<div style="margin:10px;"><input type="radio" name="cei" id="ccomment" /><label style="margin:0 10px" for="ccomment">like</label></div>
<div style="margin:10px;"><input type="radio" name="cei" id="clink" /><label style="margin:0 10px" for="clink">like</label></div>

并且当检查每个函数时,更改函数会执行一些操作:

        $('input:radio[name="cei"]').change(
function(){
    if ($(this).is(':checked') && $(this).next().html() == 'link') 
        $('#clink-val').removeAttr('disabled');else $('#clink-val').attr('disabled','disabled');
    if ($(this).is(':checked') && $(this).next().html() == 'Multiple Choices') 
    $(this).closest('fieldset').find('.multiplechoices-item').slideDown(); else $(this).closest('fieldset').find('.multiplechoices-item').slideUp();
});

到此为止,代码完美无缺。 现在,上面的单选按钮是通过服务器端代码生成的,对于用户来说可能只有2个无线电,而对于另一个用户可能只有5个无线电。所以我想要检查第一台收音机。我试过了:

 $('input:radio[name="cei"]').first().attr('checked','checked');

 $('input:radio[name="cei"]').first().click();

虽然上述两个代码都设置了第一个收音机的已检查属性,但对于它们都没有,$('input:radio[name="cei"]').change()不会触发。

3 个答案:

答案 0 :(得分:2)

更改值后,您可以触发更改事件。

$('input:radio[name="cei"]').first().attr('checked','checked').change();

&#13;
&#13;
  $('input:radio[name="cei"]').change(function(){
  console.log('changed');
    if ($(this).is(':checked') && $(this).next().html() == 'link') 
        $('#clink-val').removeAttr('disabled');else $('#clink-val').attr('disabled','disabled');
    if ($(this).is(':checked') && $(this).next().html() == 'Multiple Choices') 
    $(this).closest('fieldset').find('.multiplechoices-item').slideDown(); else $(this).closest('fieldset').find('.multiplechoices-item').slideUp();
});


 $('input:radio[name="cei"]').first().attr('checked','checked').change();
 $('input:radio[name="cei"]').eq(1).attr('checked','checked').change();
 $('input:radio[name="cei"]').eq(1).attr('checked','checked').change();
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div style="margin:10px;">
  <input type="radio" name="cei" id="clike" /><label  for="clike">like</label>
</div>
<div style="margin:10px;">
  <input type="radio" name="cei" id="ccomment" /><label  for="ccomment">like</label>
</div>
<div style="margin:10px;">
  <input type="radio" name="cei" id="clink" /><label for="clink">like</label>
</div>
&#13;
&#13;
&#13;

答案 1 :(得分:1)

您需要触发更改事件

$('input:radio[name="cei"]').first().prop('checked',true).change();

答案 2 :(得分:0)

而不是

$('input:radio[name="cei"]').change(function(){})

$('body').on('change','input:radio[name="cei"]',function(){})

dinamically添加的元素需要像这样的事件监听器