Jquery使用attr()禁用输入

时间:2010-07-27 08:53:56

标签: jquery input attributes

当我尝试使用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()问题仍然存在。

6 个答案:

答案 0 :(得分:2)

在您遇到这种行为的浏览器中会非常有趣。更有趣的是要知道,如果不工作意味着该元素没有被禁用,或者该属性只是缺少disabled作为值。

由于W3Cdisabledreadonly不应该有值。

如此合理地

<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=""。但它工作得很好。

见这里:http://www.w3schools.com/tags/att_input_disabled.asp

答案 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中验证了这一点。