jQuery $("#radioButton").change(...) 在取消选择期间不触发

IT技术 javascript jquery html radio-button
2021-02-12 22:34:01

大约一个月前,米特的问题没有得到解答。可悲的是,我现在遇到了同样的情况。

http://api.jquery.com/change/#comment-133939395

情况是这样的:我使用 jQuery 来捕获单选按钮中的更改。选择单选按钮时,我启用一个编辑框。当取消选择单选按钮时,我希望禁用编辑框。

使能工作。当我在组中选择不同的单选按钮时,不会触发change事件有谁知道如何解决这一问题?

<input type="radio" id="r1" name="someRadioGroup"/> 

<script type="text/javascript">
    $("#r1").change(function () {
        if ($("#r1").attr("checked")) {
            $('#r1edit:input').removeAttr('disabled');
        }
        else {
            $('#r1edit:input').attr('disabled', true);
        }
    });
</script>
6个回答

看起来该change()函数仅在您选中单选按钮时调用,而不是在取消选中时调用。我使用的解决方案是将更改事件绑定到每个单选按钮:

$("#r1, #r2, #r3").change(function () {

或者您可以为所有单选按钮指定相同的名称:

$("input[name=someRadioGroup]:radio").change(function () {

这是一个有效的jsfiddle 示例(根据 Chris Porter 的评论更新。)

根据@Ray 的评论,您应该避免.在其中使用名称这些名称在 jQuery 1.7.2 中有效,但在其他版本中无效jsfiddle 示例。)。

@Ray:该错误仅发生在带有点的名称中。没有点它工作正常,请参阅jsfiddle.net/zn7q2/4
2021-03-14 22:34:01
如果您更改为“input[name='DateSearchOptions.Test']”(名称用单引号括起来),则该示例适用于点:jsfiddle.net/4hTxn
2021-03-23 22:34:01
代码 "if ($("#myCheckbox").attr("checked"))" 对我不起作用,我不得不使用 "if ($("#myCheckbox").is(":checked") )”。
2021-04-01 22:34:01
输入“[name=someRadioGroup]”语法错误。正确的语法是:“input[name=someRadioGroup]:radio”。另外值得注意的是,此方法仅适用于 JQuery 1.7.2 版本。已经为此提交了一个错误。如果您好奇,请参阅:jsfiddle.net/zn7q2/2以获取此错误的示例。
2021-04-06 22:34:01
jsFiddle 解决方案设置为 Mootools 而不是 jQuery 并阻止其运行。尝试此解决方案以查看行为:jsfiddle.net/N9tBx我添加了一个更改的日志,您可以轻松地看到当检查的单选按钮未选中另一个被选中的单选按钮时未触发更改事件。
2021-04-08 22:34:01
<input id='r1' type='radio' class='rg' name="asdf"/>
<input id='r2' type='radio' class='rg' name="asdf"/>
<input id='r3' type='radio' class='rg' name="asdf"/>
<input id='r4' type='radio' class='rg' name="asdf"/><br/>
<input type='text' id='r1edit'/>                  

jQuery部分

$(".rg").change(function () {

if ($("#r1").attr("checked")) {
            $('#r1edit:input').removeAttr('disabled');
        }
        else {
            $('#r1edit:input').attr('disabled', 'disabled');
        }
                    });

这是演示

应该.attr('checked')改为.prop('checked').
2021-03-17 22:34:01
这个有效,不像其他被标记为正确的:S
2021-03-19 22:34:01
+1。Andomar 的解决方案奏效了,但这对我来说更有意义。如果表单更改或具有动态数量的字段,则使用类选择器可以防止必须更改函数。为死灵投票!(尽管现在 2 年后 jQuery 建议使用 prop() 而不是 attr()。api.jquery.com/prop
2021-04-07 22:34:01
不好的例子,这不是它的完成方式。请参阅我关于禁用元素的其他答案(删除属性是错误的)
2021-04-12 22:34:01

您可以按名称一次绑定到所有单选按钮:

$('input[name=someRadioGroup]:radio').change(...);

这里的工作示例:http : //jsfiddle.net/Ey4fa/

对此的一个变体是 $("form input:radio").change(...); 并测试特定的单选按钮条件 prop('checked')。这在 ASP.NET 中使用动态 RadioButtonList 时非常有用。
2021-03-27 22:34:01

这通常对我有用:

if ($("#r1").is(":checked")) {}

我的问题很相似,这对我有用:

$('body').on('change', '.radioClassNameHere', function() { ...