jquery-ui buttonset click事件似乎没有改变检查状态

时间:2015-10-16 15:45:37

标签: javascript jquery jquery-ui jquery-ui-button

我正在使用带有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

我做错了什么?如何获得正确的价值?

编辑:

Example fiddle

如您所见,我可以点击“否”,仍然选中“是”。由于它是收音机,我希望它的行为方式

2 个答案:

答案 0 :(得分:0)

要更改为输入元素的已检查状态,您必须使用.prop()

设置为选中: $( "input" ).prop( "checked", true );

设为取消选中: $( "input" ).prop( "checked", false );

http://api.jquery.com/prop/

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);