jquery - 'removeAttr'没有效果

时间:2012-11-26 18:30:32

标签: jquery onclick

此代码是jquery#faq page

的直接复制粘贴
<select id="x" style="width:200px;">
   <option>one</option>
   <option>two</option>
</select>
<input type="button" value="Disable" onclick="$('#x').attr('disabled','disabled')"/>
<input type="button" value="Enable" onclick="$('#x').removeAttr('disabled')"/>

select选项列表在首次点击disable时被停用,但在点击Enable按钮时未再次启用。

请告诉我,上面这段代码出了什么问题?

我在Windows上使用Chrome 23.0.1271.64。

3 个答案:

答案 0 :(得分:3)

从jQuery 1.7开始,使用.prop代替:

$('#x').prop('disabled', true);
$('#x').prop('disabled', false);

虽然如其他人所说,它似乎似乎正常工作:

http://jsfiddle.net/K5MRf/

答案 1 :(得分:1)

您对官方jQuery页面上存在错误是正确的。查看该页面的源代码显示这是实际代码:

<select id="x" style="width:200px;" disabled="disabled">
    <option>one</option>
    <option>two</option>
</select>
<input type="button" onclick="$('#x').attr('disabled','disabled')" value="Disable">
<input type="button" onclick="$('#x').attr('disabled','')" value="Enable">

如您所见,onclick代码不正确;要启用控件(根据jQuery常见问题解答),disabled属性应设置为false或使用$(..).removeAttr()删除。

答案 2 :(得分:1)

问题是jQuery页面

他们说要使用$('#x').attr('disabled'),但如果您看到实际运行的代码,则为$('#x').attr('disabled','')

这会将disabled属性设置为空字符串。但这意味着该属性仍然存在,并且该属性的正确用法是,如果该属性存在,则该元素被视为禁用。

正确的方法是使用.prop并直接使用true / false值,如@Kurt所示..