使用jQuery获取单选按钮的当前选择值

5
在MVC中,我可以这样定义一组单选按钮:
@Html.RadioButtonFor(x => x.hasAcceptedAgreement, true) Yes
@Html.RadioButtonFor(x => x.hasAcceptedAgreement, false) No

这将呈现

<input id="hasAcceptedAgreement" name="hasAcceptedAgreement" type="radio" value="True" /> Yes
<input id="hasAcceptedAgreement" name="hasAcceptedAgreement" type="radio" value="False" /> No

我想根据所选择的项目禁用或启用一个div,在使用以下jQuery进行操作时,我已经成功地实现了:

$(':radio[name=hasAcceptedAgreement]').change(function () {
    if ($(this).val() == 'True') {
        // display div
    } else {
        // hide div
    }
});

但是当他们提交表单时,我还需要检查当前选择的值,然后再次显示/隐藏适当的部分(因为在POST时.change函数不会被调用)。 我能做到吗?
如果我尝试if $(':radio[name=hasAcceptedAgreement]').val(),它将始终评估为True,因为ids相同(我假设)。 是否有其他方法可以获取该值,还是因为MVC喜欢给每个id相同的名称而陷入困境?
编辑:顺便说一下,我知道我可以在RadioButtonFor调用中手动设置ids - 我只是想知道是否有一些更容易的内置方式来处理它,我不知道。

如果您只需要获取当前选中的单选框的值请参见此讨论 - emfurry
1
不是与问题相关,但您不应该有两个具有相同ID的元素。 - Sang Suantak
也与问题无关,但从技术上讲,jQuery在属性选择器周围需要引号,例如:radio[name="hasAcceptedAgreement"],并且您几乎无法不使用===而不是==。 - Jamie Treworgy
3个回答

9

5

我在一个项目中使用了下面的代码,它很有效!

$(':radio[name=hasAcceptedAgreement]').change(function () {
    if ($('input[name=hasAcceptedAgreement]:checked').val() == 'True') {
        // display div
    } else {
        // hide div
    }
});

1
$(function(){
   // executed once the dom is loaded

   // bind the change function as usual
   $(':radio[name=hasAcceptedAgreement]').change(function () {
        if ($(this).val() == 'True') {
            // display div
        } else {
            // hide div
        }
    }).change();  // and immediately trigger it
});

一个小改进,用于更改处理程序(这样您就不需要if / else块了)
$("#yourdiv").toggle( $(this).val() == 'True' );

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