当我尝试使用attr()禁用或只读取输入字段时,我有一个有线行为。
removeAttr('disabled')
工作正常。
attr('name', 'somthing')
正在运作
attr('id', 'something else')
正在运作
attr('disabled','disabled')
无效 - >它只在DOM中写入disabled =“”并且它不会禁用输入字段
attr('readonly','readonly')
无效 - >它只在DOM中写入readonly =“”,但仍然可以编辑输入字段。
$(document).ready(function() {
$("input[name='rdio']").live('click', function() {
$(".radio_select").find("input[name='rdio']").each(function(){
if(this.checked)
{
$("#"+this.value).removeAttr('disabled');
}
else
{
$("#"+this.value).attr('disabled','disabled');
}
});
});
});
有没有人遇到过这种行为?顺便说一下,我正在使用jquery 1.4.2
编辑:对不起,这是我尝试过的,忘了把它放回去。因此,使用attr()问题仍然存在。答案 0 :(得分:2)
在您遇到这种行为的浏览器中会非常有趣。更有趣的是要知道,如果不工作意味着该元素没有被禁用,或者该属性只是缺少disabled
作为值。
由于W3C
,disabled
或readonly
不应该有值。
如此合理地
<select disabled></select>
很好,也很正确。没有价值。
不幸的是,没有办法用javascript创建这样的构造(如果你不想覆盖html),所以你不得不添加一些值。由于两个属性都是布尔值,因此您可以添加任何内容。 .attr('disabled', 'foobar')
与.attr('disabled', true)
一样好。
答案 1 :(得分:1)
尝试使用 -
$('#target').attr("disabled", true);
$('#target').attr("readonly", true);
答案 2 :(得分:0)
我认为应该是这样的
attr('disabled', true);
和readonly相同
答案 3 :(得分:0)
.attr('disabled', 'disabled');
做得很好。
W3C规范说您必须设置没有值的属性。但这就是jquery attr()函数问题。您无法在没有值的情况下设置属性。
它在DOM中写入disabled=""
。但它工作得很好。
答案 4 :(得分:0)
执行.attr('disabled', true/false);
和readonly
相同是最快的方法。但是,请记住,如果元素被“禁用”,它将不会出现在表单提交数据中,而readonly
将出现在帖子数据中。对于开发人员来说,这是一个常见的陷阱,他们想要禁用输入,但后来想知道他们为什么不在PHP中获取他们的$_POST
数据。
只是抬起头来!
答案 5 :(得分:0)
@OP:我怀疑该按钮在功能上被禁用但在视觉上没有被禁用。
我经历了完全相同的症状。使用attr('disabled','disabled')在DOM中产生disabled =“”。该按钮实际上已被禁用,因为它不再生成点击事件,也未提交表单。然而,它仍然被强调,好像它是。
原因是按钮的CSS,其中包含伪选择器':active'。即使按钮被禁用,也会应用此功能。将':not([DISABLED])'添加到活动状态会删除误导性突出显示。
对于任何Drupal用户,Seven主题都有这个CSS而Seven是默认的管理主题。
我在FF和Chrome中验证了这一点。