我正在使用带有2个单选按钮的jquery-ui按钮组,用于是/否输入。
var yesInput = document.createElement("input");
yesInput.type = "radio";
$(yesInput).attr('id', "njs1");
$(yesInput).prop('checked', this._data);
var noInput = document.createElement("input");
noInput.type = "radio";
$(noInput).attr('id', "njs2");
$(noInput).prop('checked', !this._data);
我正在调用一个更改事件,在这些按钮和处理函数中尝试检测是否单击了选中的按钮。 buttonSet
是被设为buttonset()
的div。
$("input[type=radio]", buttonSet).change(checkHandler);
var data= $("input[type=radio]", buttonSet).eq(0).is(':checked');
在这种情况下,我希望如果单击第二个按钮,数据应该返回false。我的理解是当我检查收音机时,它的html被修改为添加checked
。
但是,无论调用什么,数据始终为true
。
我做错了什么?如何获得正确的价值?
编辑:
如您所见,我可以点击“否”,仍然选中“是”。由于它是收音机,我希望它的行为方式
答案 0 :(得分:0)
要更改为输入元素的已检查状态,您必须使用.prop()
设置为选中:
$( "input" ).prop( "checked", true );
设为取消选中:
$( "input" ).prop( "checked", false );
jQuery 1.6之前.attr
确实改变了html属性和dom属性。
从v1.6开始,这种行为已经改变。
属性和属性之间的区别非常重要 具体情况。在jQuery 1.6之前,有时会使用.attr()方法 在检索某些属性时考虑了属性值, 这可能会导致行为不一致。从jQuery 1.6开始,.prop() 方法提供了一种显式检索属性值的方法 .attr()检索属性。
<强>更新强>
两个无线电输入都应具有完全相同的值,以便将它们组合在一起。
$(yesInput).attr('id', "njs1");
$(yesInput).attr('name', "toggle"); // << shared name
$(noInput).attr('id', "njs2");
$(yesInput).attr('name', "toggle"); // << shared name
答案 1 :(得分:0)
为什么不使用jQuery创建元素的方式? 使用单击事件进行单选按钮。
$('<input/>').attr({type: "radio", "id": "njs1"})
.prop("checked", !this._data)
.click(checkHandler);