【问题标题】:What's wrong with my mutually exlusive radio input script?我的互斥无线电输入脚本有什么问题?
【发布时间】:2012-02-13 04:45:05
【问题描述】:

它不起作用,但如果我注释掉uncheck.removeAttr('checked'),它就会起作用! 我哪里出错了?

以小 HTML 为例:

<input type="radio" name="type" value="duration" checked="true" />
<select id="duration" class="duration">
    <option value="P30D">30 giorni</option>
    <option value="P1Y">365 giorni</option>
</select>

<input type="radio" name="type" value="interval" />
<select id="year">
    <?php foreach($years as $y) : ?>
        <option value="<?php echo $y->k; ?>">
    <?php echo $y->v; ?>
        </option>
    <?php endforeach; ?>
</select>

jQueryclick()函数事件:

$('select').click(function() {

    var check   = $('input[type="radio"][value="duration"]');
    var uncheck = $('input[type="radio"][value="interval"]');

    if(!$(this).hasClass('duration')) {
        var old = check;
        check = uncheck;
        uncheck = old;
    }

    check.attr('checked', true); // Same: .attr('checked', 'checked')
    uncheck.removeAttr('checked');

})

【问题讨论】:

  • 您不需要需要从其他元素中删除 'checked' 属性。它们是同名的无线电输入 - 无论如何,互斥性将由浏览器处理。

标签: jquery forms jquery-selectors radio-button


【解决方案1】:

应该是

check.attr('checked', 'checked');

更新

好的,回答您的问题,当从选择框中选择一个值时如何选择单选按钮,您将拥有以下 javascript:

$('select').click(function() {
    $('input[type="radio"]').removeAttr('checked'); // remove all checked from radio inputs
    $(this).prev('input[type="radio"]').attr('checked', 'checked'); // checks the above radio button
});

【讨论】:

  • 对不起@Polmonino 那么你的具体目标是什么?单击选择元素时是否应该选择单选按钮?
  • 是的,应该检查选择点击事件。即使使用您的解决方案它也不起作用,它只有在我删除行 uncheck.attr()... 时才有效...
【解决方案2】:

在这种情况下尝试使用.prop() 而不是.attr()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-01
    • 2015-04-06
    • 2014-06-29
    • 2013-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多