【问题标题】:Not able to uncheck a radiobutton after selecting another选择另一个单选按钮后无法取消选中
【发布时间】:2011-03-16 16:39:55
【问题描述】:

这是我的设置:如果在页面加载时已经检查了radiobutton1(它在查看源中有checked="checked")并且我在选择radiobutton2 后尝试取消选中它,checked 上的checked 属性radiobutton1选择radiobutton2后没有被删除:

if($('#' + radiobutton1_ID).is(':checked'))
    UncheckRadioButton('#' + radiobutton2_ID);

// Utility function to clear a radiobutton's "checked" attribute
function UncheckRadioButton(radiobuttonID) {
    radiobuttonID.removeAttr("checked"); 
}

选择radiobutton2 并执行“查看源代码”后,我在radiobutton2 上看不到checked="checked"即使页面显示此按钮已选中),对于radiobutton1 它仍然显示checked="checked"。这是为什么?应该是相反的。


更新

这是我的更多代码。我知道if 语句部分受到打击,所以这不是问题,而且我知道我使用的单选按钮 ID(ccRadioBtncheckRadioBtnpaypalRadioButton)是正确的:

    var ccRadioBtn = ccRadioButton; // credit card radio button ID
    var paypalRadioButton = payPalRadioClientID;

    // ...

    if (paypalIsSelected()) {
        UncheckRadioButton(checkRadioBtn);
        UncheckRadioButton(ccRadioBtn);

        // ...
    } else {
        // force a clear on any previously selected payment options
        CheckRadioButton(ccRadioBtn); // default to credit card radio button
        UncheckRadioButton(paypalRadioButton);
        UncheckRadioButton(checkRadioBtn);

        // ...
    }
}

function UncheckRadioButton(radiobuttonID) {
    $('#' + radiobuttonID).removeAttr("checked"); 
}

function CheckRadioButton(radiobuttonID) {
    $('#' + radiobuttonID).attr('checked', true);
}

问题是:如果一个单选按钮默认为checked="checked" 并且我单击另一个单选按钮,则应该删除第一个单选按钮的checked 属性,但事实并非如此。并且已选择的第二个单选按钮没有应有的checked="checked"。当我查看页面源时,我可以看到这一点。我不确定为什么这不起作用。

【问题讨论】:

  • 我已经用我的实际代码更新了我的帖子。问题依然存在。
  • 问题最终不是 JS 问题,但我确实从这个线程中得到了很多。感谢所有回复的人。

标签: jquery radio-button checked


【解决方案1】:

你在这里传递一个字符串:

UncheckRadioButton('#' + radiobutton_2_ID);

但在这里尝试将其用作 jQuery 对象:

radiobuttonID.removeAttr("checked");
//which is actually doing this:
"#something".removeAttr("checked"); //.removeAttr() is not a function for string

你需要把它包装起来用作选择器,像这样:

$(radiobuttonID).removeAttr("checked");

至于查看源...取决于浏览器,例如IE会显示页面的原始源,而不是您当前查看的状态。

【讨论】:

  • 它仍然无法正常工作。我不知道为什么,但如果我再次选择 radiobutton1,查看源它已按预期检查 =“checked”。但是在我更改并选择radiobutton2 然后查看源代码后,radiobutton1 仍然有checked="checked" 并且radiobutton2 根本没有checked 属性。关于这里的 DOM 有什么我不知道的吗?也许视图源不代表当前状态?这意味着如果我在 radiobutton1 之后更改为 radiobutton2 状态直到回发才实现?
  • @coffeeaddict - 是否检查了 UI,而不是查看源?还有你用的是哪个浏览器?您应该使用 Chrome 或 Firebug 并为此检查元素以获得准确的 current 视图。
  • 当您说 UI 已检查时,单选按钮被选中。当页面加载时,我将 paypal 单选按钮设置为默认检查(使用 .NET 代码/代码隐藏)。然后我单击并更改为 UI 上的信用卡单选按钮。然后我查看源代码以查看 paypal 的单选按钮是否已删除它的 check="checked" 并将 check="checked" 添加到信用卡单选按钮,因为它自然应该因为我选择了 cc 单选按钮对吗?视图源现在应该显示带有checked="checked" 的cc 单选按钮吧?
猜你喜欢
  • 2016-09-24
  • 2011-11-05
  • 1970-01-01
  • 1970-01-01
  • 2019-03-25
  • 2016-05-25
  • 2015-02-27
  • 2023-03-11
  • 1970-01-01
相关资源
最近更新 更多