2013-02-06 111 views
0

所以我想要做的就是將文本輸入的disabled和readonly屬性分別設置爲「disabled」和「readonly」。我正在使用Jquery 1.7.1版。我嘗試以下方法:屬性動態更改不設置值

$("#testtext").attr('disabled','disabled'); 
$("#testtext").attr("readonly","readonly"); 
$("#testtext").attr('disabled',true); 
$("#testtext").attr("readonly",true); 
$("#testtext").prop('disabled',true); 
$("#testtext").prop("readonly",true); 

生成的標記看起來是這樣的:

<input type = "text" id = "testtext" disabled /> 

正如你可以看到它被添加禁用的屬性,但不能給它一個值。這適用於某些設備,但不是我想要支持的所有設備。這似乎是jQuery應該做的事情,但我的谷歌在這方面沒有提出太多。有沒有人有任何建議或建議?任何意見將不勝感激,非常感謝!

+1

哪個設備?你在使用jQuery Mobile嗎? 'disabled'屬性是一個[布爾屬性](http://www.w3.org/TR/html5/infrastructure.html#boolean-attribute):如果存在,無論該值如何,輸入被禁用。 –

+1

「結果標記」......用JavaScript/jQuery操作DOM與標記無關。 – Pointy

回答

4
$("#testtext").prop("disabled", true); 
$("#testtext").prop("readonly", true); 

作品無處不在,因爲這些都是布爾標誌:他們的存在表明該標誌上(該元素是禁用/只讀)無論屬性是否有值(或者甚至在標籤的值是什麼⇨disabled=false也被禁用)。

2

.prop(propertyName) // propertyName要獲取的屬性的名稱。

.attr(attributeName) // attributeName要獲取的屬性的名稱。

按規格:

在jQuery 1.6的,所述.attr()方法返回未定義對於尚未被設置的屬性 。另外,.attr()不應該用於 純文本對象,數組,窗口或文檔。要檢索並更改DOM屬性,請使用.prop()方法。

.prop()方法僅獲取匹配集中第一個元素 的屬性值。對於尚未設置的屬性 的值,或者如果匹配的集合沒有元素,它將返回undefined。要分別獲取每個元素的值 ,請使用循環構造,例如 作爲jQuery的.each()或.map()方法。

屬性和屬性之間的差異在 特定情況下可能很重要。在jQuery 1.6之前,.attr()方法有時在檢索某些屬性時會考慮屬性值, 可能會導致行爲不一致。從jQuery 1.6開始,.prop() 方法提供了顯式檢索屬性值的方法,而 .attr()檢索屬性。

1

去與.prop()。它更適合/可靠比.attr()

屬性的布爾屬性通常影響一個DOM元素的動態狀態而不 改變串行化HTML屬性。示例包括輸入元素的值 屬性,輸入和 按鈕的禁用屬性或複選框的選中屬性。 .prop()方法 應該用於設置禁用和檢查,而不是。ATTR() 方法

(從.prop() jQuery的文檔)