jQuery set然后在textbox上读取readonly attr

时间:2010-09-14 14:53:41

标签: jquery attributes jquery-selectors

​<input id="test" type="text" value="text" />​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

alert(​$(':input:not([readonly])').length);​​​​​​​​​​​​​​​​​ // 1

$('#test').attr('readonly', 'readonly');

alert($(':input:not([readonly])').length); // 1

$('#test').removeAttr('readonly');​​​​​​​​​​

alert($(':input:not([readonly])').length); // 1

the question here之后,我无法使解决方案起作用,因为似乎jQuery没有正确设置readonly属性(或者至少一致)。

注意我使用$('#test').attr('readonly', true);

获得相同的结果

我正在使用Chrome,而readonly属性呈现为readonly=""。这里还有另一篇文章,建议FireFox也这样做。

我对此并不感到困扰,因为它仍然阻止了文本框的可编辑性,但我无法找到检测readonly属性的方法。

我通常喜欢jQuery,但这有点像WTF。

有什么想法吗?

2 个答案:

答案 0 :(得分:7)

我个人不会使用removeAttr()...我只是用attr()将其设置为false。

然后你可以正常查询属性:

if ($("#X").attr("readonly"))
{
    execute code
}

此外,您可以继续使用removeAttr(),然后只使用长度作为检测属性的方法:

if (!$("#X").attr("readonly").length)
{
    execute code
}

如果你担心选择器,你应该选择语法为:not([readonly='readonly']) 编辑:我看到你已经在你引用的答案中。

答案 1 :(得分:0)

我认为即使您设法使用Javascript以编程方式禁用输入,智能用户也可以在禁用浏览器JavaScript时更改它。所以为了安全起见,最好重新加载服务器端的值。