2010-09-14 64 views
5
​<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的不正确设置只读属性(或者至少一致)。jQuery的设定只读读ATTR在文本框

注意我会得到相同的结果与$('#test').attr('readonly', true);

我使用的是Chrome和只读属性呈现为readonly=""。这里有另一篇文章,这表明FireFox也是如此。

我对此没有太多打扰,尽管它仍然停止了文本框的编辑,但是我无法找到一种方法来检测只读属性。

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

任何想法?

+1

您看到此行为的原因是因为'[readonly]'选择器只是检查属性的*存在*,而'true'或'false',所以它存在。 – 2010-09-14 15:12:14

回答

7

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

然后,您可以只查询性能正常:

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

此外,您还可以继续使用removeAttr(),然后只需使用长度,以此来检测属性:

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

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

+0

好吧,但它是真正导致问题的添加属性。 – fearofawhackplanet 2010-09-14 14:58:21

+0

我只是添加相同的方式:$(“#X”)。attr(“readonly”,true); – Trafalmadorian 2010-09-14 15:03:31

+0

也在这种情况下,行为,而不是浏览器调试器......有时他们并不总是正确地跟踪属性更改。 – Trafalmadorian 2010-09-14 15:04:41

0

我认为,即使您设法禁用使用Javascript进行编程式输入,智能用户将能够更改它,如果他们禁用浏览器的JavaScript。所以为了安全起见,最好在你的服务器端重新加载这个值。