2010-09-14 56 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。所以爲了安全起見,最好在你的服務器端重新加載這個值。