单选按钮“已检查”属性不起作用

时间:2010-08-31 06:57:08

标签: html forms radio-button

默认情况下,单选按钮不会显示为checked。我开始没有默认选择做一些非常简单的js验证,它没有工作。所以我选择使用默认值,直到我发现它并发现一些奇怪的事情发生。

标记有效,我尝试过FF,Safari和Chrome。什么都行不通。

我认为这与jQuery库存在冲突,因为当我删除调用脚本时问题就消失了。

<label>Do you want to accept American Express?</label> Yes
<input id="amex" style="width: 20px;" type='radio' name='Contact0_AmericanExpress' value='1' /> No
<input style="width: 20px;" type='radio' name='Contact0_AmericanExpress' class='check' value='0' checked="checked" />

15 个答案:

答案 0 :(得分:76)

如果你有多个同名的被检查属性,它将采用页面上最后一次检查的无线电。

<form>
    <label>Do you want to accept American Express?</label>
    Yes<input id="amex" style="width: 20px;" type="radio" name="Contact0_AmericanExpress"  />  
    maybe<input id="amex" style="width: 20px;" type="radio" name="Contact0_AmericanExpress"  checked="checked" />  
    No<input style="width: 20px;" type="radio" name="Contact0_AmericanExpress" class="check" checked="checked" />
</form>

答案 1 :(得分:30)

可能是这样:

Is there a bug with radio buttons in jQuery 1.9.1?

简而言之:不要使用attr()而是使用prop()来检查单选按钮。上帝,我讨厌JS ......

答案 2 :(得分:11)

解决这个恼人问题的最终JavaScript解决方法 -

只需将jQuery命令包装在setTimeout中即可。间隔可以非常小,我使用10毫秒,它似乎工作得很好。延迟非常小,最终用户几乎检测不到。

setTimeout(function(){
  $("#radio-element").attr('checked','checked');
},10);

这也适用于

  • $("#radio-element").trigger('click');
  • $("#radio-element").attr('checked',true);
  • $("#radio-element").attr('checked',ANYTHING_THAT_IS_NOT_FALSE);

Hacky ...... hacky ...... hacky ...... hacky ...是的,我知道......因此这是一个解决方法......

答案 3 :(得分:11)

无线电输入必须位于表单内以便“检查”才能工作。

答案 4 :(得分:5)

嘿我在ajax生成的页面中也遇到了类似的问题..我在FF中使用Webdeveloper插件获取生成的源代码,并检查了表单中的所有输入,发现隐藏的div中有另一个复选框(显示:none)具有相同的ID,一旦我更改了第二个复选框的id,它就开始工作..你也可以试试..让我知道结果..干杯

答案 5 :(得分:3)

只需将您的代码复制到:http://jsfiddle.net/fY4F9/

默认情况下选中“否”。你有任何运行的javascript会影响收音机盒吗?

答案 6 :(得分:1)

嗨,我想如果你为第二个输入添加id属性并给它一个唯一的id值,它将起作用

<label>Do you want to accept American Express?</label>
Yes<input id="amex" style="width: 20px;" type='radio' name='Contact0_AmericanExpress'   value='1'/>  
No<input style="width: 20px;" id="amex0" type='radio' name='Contact0_AmericanExpress' class='check' value='0' checked="checked"/>

答案 7 :(得分:1)

也尝试这种方式

$('input:radio[name="name"][id="abcd'+no+'"]').attr("checked", "checked");

如果有<form />标签,则为("checked", true),否则为("checked", "checked")

答案 8 :(得分:0)

您的代码是正确的,尝试调试您的JQuery脚本以找到问题! 如果你正在使用FF,你可以安装一个扩展来调试JS(和JQuery)它叫做FireBug。

答案 9 :(得分:0)

jQuery文档提供了a detailed explanation for checked property vs attribute

因此,这是另一种检索所选单选按钮值的方法

var accepted = $('input[name="Contact0_AmericanExpress"]:checked').val();

答案 10 :(得分:0)

  

<Variable Name="SomeProperty" Type="string" Value="true" bal:Overridable="yes" />

答案 11 :(得分:0)

我可以通过将input标签的名称设置为两组输入相同来进行复制,如下所示:

<body>
  <div>
      <div>
        <h3>Header1</h3>
      </div>
      <div>
          <input type="radio" name="gender" id="male_1" value="male"> Male<br>
          <input type="radio" name="gender" id="female_1" value="female" checked="checked"> Female<br>
          <input type="submit" value="Submit">
      </div>
  </div>


  <div>
      <div>
        <h3>Header2</h3>
      </div>
      <div>
          <input type="radio" name="gender" id="male_2" value="male"> Male<br>
          <input type="radio" name="gender" id="female_2" value="female" checked="checked"> Female<br>
          <input type="submit" value="Submit">
      </div>
  </div>
</body>

(要查看运行情况,请点击here

以下两种解决方案均可解决此问题:

  1. 第二组中的输入使用不同的名称
  2. 在其中一个组中使用form标签而不是div标签(无法真正找出解决问题的真正原因。很乐意听取一些意见!)

答案 12 :(得分:-1)

只需将checked属性添加到您想要默认选中的每个收音机

试试这个:

<input style="width: 20px;" type="radio" name="Contact0_AmericanExpress" class="check" checked/>

答案 13 :(得分:-2)

你使用的是非标准的xhtml代码(值应该用双引号括起来,而不是单引号)

试试这个:

<form>
  <label>Do you want to accept American Express?</label>
  Yes<input id="amex" style="width: 20px;" type="radio" name="Contact0_AmericanExpress"  />  
  No<input style="width: 20px;" type="radio" name="Contact0_AmericanExpress" class="check" checked="checked" />
</form>

答案 14 :(得分:-2)

checked="checked"替换为checked={true}。或者甚至可以将其缩短为checked

这是因为checked道具的期望值类型是布尔值。不是字符串。