第二次使用单选按钮后,JQuery buttonset(“refresh”)失败

时间:2014-02-20 11:29:42

标签: javascript jquery html refresh radio

我在Project中使用了以下Jquery按钮:

<div id="TR1_Mode">
    <input type="radio" id="TR1_Mode_Dif" name="TR1_Mode_radio" value="Mode_Dif" ><label for="TR1_Mode_Dif">Differentiation</label>
    <input type="radio" id="TR1_Mode_Int" name="TR1_Mode_radio" value="Mode_Int" checked="checked"><label for="TR1_Mode_Int">Integration</label>
</div>

使用以下代码以编程方式更改“已检查”状态(在控制台中尝试):

$('[name="TR1_Mode_radio"][value="Mode_Dif"]').attr("checked", false);
$('[name="TR1_Mode_radio"][value="Mode_Int"]').attr("checked", true);
$('#TR1_Mode').buttonset("refresh");

它可能会起作用,但在反向做同样的事情之后:

$('[name="TR1_Mode_radio"][value="Mode_Dif"]').attr("checked", true);
$('[name="TR1_Mode_radio"][value="Mode_Int"]').attr("checked", false);
$('#TR1_Mode').buttonset("refresh");

取消选中已选中的按钮,但不会检查未选中的按钮。我错过了什么,或者这是jquery中的错误行为?

Checkbuttons似乎表现良好,但它们没有达到相同的目的。

我使用Chrome(32.0.1700.107 m)和Firefox(27.0.1)对此进行了测试,并使用最新的Jquery版本对其进行了测试:jquery-2.0.3.js和jquery-1.10.2.js

1 个答案:

答案 0 :(得分:0)

$.prop$.attr之间存在差异。具体来说,attr相当于重写html,而prop实际上修改了DOM对象的值。所以,这可行:

$('[name="TR1_Mode_radio"][value="Mode_Dif"]').prop("checked", true);
$('[name="TR1_Mode_radio"][value="Mode_Int"]').prop("checked", false);

或者这会起作用

$('[name="TR1_Mode_radio"][value="Mode_Dif"]').attr('checked', 'checked');
$('[name="TR1_Mode_radio"][value="Mode_Int"]').removeAttr('checked');

您在网上找到的示例可能令人困惑,因为旧版本的jQuery(&lt; 1.6)只有一个attr方法,这两种行为之间的行为会有些不一致。

为了它的价值,我个人认为prop会带来更具表现力和可理解性的代码。