使用jQuery,我们如何从所有值为false的元素中删除禁用属性?

3

我已经打印了以下形式的输入复选框。

<input type="checkbox" id="a1" value="11" disabled="false">
<input type="checkbox" id="a2" value="21" disabled="true">
<input type="checkbox" id="a3" value="31" disabled="false">

我知道disabled属性不需要赋值。因此,当存在该属性时,元素将被禁用,无论所分配的值为何。我希望从所有值为false的输入元素中删除所有disabled属性。

使用jQuery,我想使用以下代码。


```javascript $('input[disabled]').each(function() { if (this.value == 'false') { $(this).removeAttr('disabled'); } }); ```
$("*[disabled]").not(true).removeAttr("disabled");

需要注意的是:一旦这个被移除了,据我所知,它就无法再放回去了。 - Sparky
1
但是你为什么想要这样做呢? - kapa
为什么要这样做呢? - Sparky
3
从根源解决问题。一开始就不要向客户端提供损坏的HTML。 - Quentin
我正在使用基于云的开发框架,在其中无法打印没有值的元素属性。因此,我将使用jQuery来删除具有false值的元素。 - dipu
5个回答

3
为什么不只匹配disabled属性为false的元素?
$('[disabled="false"]​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​')​.removeAttr('disabled');​​​

演示: http://jsfiddle.net/ASN29/

无论disabled属性的值是什么,只要存在该属性,元素就会被禁用。所以这并不是一个很好的想法。那么HTML是如何变成这样的呢?


在Salesforce.com云环境中,打印HTML元素的小部件(组件),每个属性都必须像XML属性一样具有一个值。 - dipu
我的问题是因为Firefox缓存了填充下拉列表的结果。由于页面上先前使用时禁用了一些下拉元素,因此Firefox从缓存中加载时仍然保留了禁用属性。在页面加载时,我想要删除所有禁用属性。 - DFTR

2
你可以使用这样的选择器:

只需使用以下选择器:

$('input[disabled="false"]').removeAttr("disabled");

jsFiddle演示

我将*替换为input,这样可以大大缩小查询范围。它将搜索具有名为disabled且值为false的属性的input元素。

我建议您根本不要这样做。那个HTML应该从未被生成。


2
如果你想启用它们,请使用 .prop(),因为 disabled 是一个实际的属性,适用于 checkbox 输入框。
$('input[disabled="false"]').prop('disabled', false);

演示请参见http://jsfiddle.net/gaby/Bn4dr/


“然而,正确的方法是直接打印正确的html。”
<input type="checkbox" id="a1" value="11">
<input type="checkbox" id="a2" value="21" disabled>
<input type="checkbox" id="a3" value="31">

0

1
disabled 属性的存在会自动使元素变为禁用状态,无论属性的值如何。因此,这将从所有带有 disabled 属性的元素中删除 disabled 属性。 - Blender
适用于启用所有已禁用元素的功能 - jvadillo

0
$('input[disabled="false"]').removeAttr("disabled");

请查看http://jsfiddle.net/JKs4C/

至于这是否是一个好主意,另一方面...我认为真正的答案是修复您的服务器端渲染,以完全省略未禁用的元素的禁用属性。否则,如果您的脚本出错、noscript等,所有元素都将被禁用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接