jquery版本間兼容性:checkbox選中狀態

最近在學習Jquery,發現attr不太好用,從網上搜了下終於知道其緣由,記下備查。jquery

如下爲覺得網友在js貼吧的內容:web

以<input type="checkbox" id="all"/>爲例子取值的例子
$("#all").attr("checked")
在1.6前(含1.6),返回值是boolean類型的true或false;
在1.6後,返回值是"checked"或undefined。

再來看賦值的例子
$("#all").attr("checked",xxxx)
當xxxx爲false或null時,取消選中;不然,選中。
因此,$("#all").attr("checked", undefined)執行的結果是:checkbox變成選中狀態。

綜合attr取值和賦值的例子,再考慮下面第三個經常使用場景:全選的例子
$("#all").click(function() {
var flag = $(this).attr("checked");
$("input.single").attr("checked",flag);
});
當用jquery 1.6前的版本時,flag是true|false;能夠獲得咱們想要的結果。
當用1.6後的版本時,flag是"checked"| undefined;結果是複選框老是被選中。

兼容性解決方案:
方案一:
var flag = $(this).attr("checked") || false;
這樣,flag的值也是true 或 false了。方案二:is(":checked")


另外,1.6後,對dom屬性的更改,jquery推薦使用prop()代替attr()。
prop()方法在jquery 1.6後提供。

下列圖片爲jquery 1.7.2和1.4.2的demo演示:dom

相關文章
相關標籤/搜索