$("input").attr("checked",""checked",""checked ")
設定以後checkbox並沒有變成選取狀態,用chrome調試看了一下,checkbox中確實有checked屬性,而且,值為checked,但是頁面顯示仍然為未選中狀態
$("input").prop("checked",prop("checked",prop("checked true);
ttributes和properties之間的差異在特定情況下是很重要。 jQuery 1.6之前 ,.attr()方法在取某些 attribute 的值時,會傳回 property 的值,這就導致了結果的不一致。從 jQuery 1.6 開始, .prop()方法 方法傳回 property 的值,而 .attr() 方法傳回 attributes 的值。
例如, selectedIndex, tagName, nodeName, nodeType, ownerDocument, defaultChecked, 和 defaultSelected 應使用.prop()方法進行取值或賦值。 在jQuery1.6之前,這些屬性使用.attr()方法取得,但這並不是元素的attr屬性。他們沒有對應的屬性(attributes),只有特性(property)。
例如,考慮一個DOM元素的HTML標記中定義的
,並假設它是一個JavaScript變數命名的elem :
elem.checked true (Boolean) 將改變複選框的狀態
$(elem).prop("checked") true (Boolean) 將改變複選框的狀態
elem.getAttribute("checked") "checked" (String) 不會改變的複選框的初始狀態;
$(elem).attr("checked") (1.6) "checked" (String) 不會改變的複選框的初始狀態;
$(elem).attr("checked") (1.6.1 ) "checked" (String) 將改變複選框的狀態
$(elem).attr("checked") (pre- 1.6) true (Boolean) 將改變複選框的狀態
根據W3C的表單規範,在checked屬性是一個布林屬性,這意味著只要該attribute 存在,即使它沒有值,或是一個空字串,該屬性對應的property 就是true。以下建議的是相容瀏覽器方式,判斷checkbox 元素的checked 屬性是否為"真" 的方法:
if ( elem.checked )
if ( $(elem).prop("checked") )
if ( $(elem).is(":checked" ) )
如果你使用jQuery 1.6 ,代碼if ( $(elem).attr("checked") ),將得到一個屬性(attribute) ,它不會改變該複選框被選中和選中。它只是用來儲存預設或選取屬性的初始值。為了保持向後相容,.attr() 方法從 jQuery 1.6.1 開始除了傳回屬性值外,還會更新 property 屬性,因此 boolean attribute(布林屬性)不需要透過 .prop() 來改變其值。推薦使用上述方法之一,來取得 checked 的值。