最近项目jquery有2个版本,1.6.2.min.js和1.10.2.min.js,一直没搞明白为什么要同时用2个,做了个多选框全选功能,1.6.2版本的没问题,1.10.2版本的全选只有第一次出效果,以后就全选不了,但checked属性已经有了,就是页面UI没有效果。代码如下:
//全选
$("#all_checked").click(function() {
var boo = $(this).is(":checked");
$("input[type=checkbox]").each(function() {
if($(this).attr("class") != "zdybox") {
$(this).attr("checked", boo);
$(this).click(function() {
if(!$(this).is(":checked")) {
$("#all_checked").attr("checked", false);
}
});
}
});
});
百度查了发现用checked属性(准备说是特性)时,不能用attr,改为以下代码就行了:
//全选
$("#all_checked").click(function() {
var boo = $(this).is(":checked");
$("input[type=checkbox]").each(function() {
if($(this).attr("class") != "zdybox") {
$(this).attr("checked", boo);
$(this).click(function() {
if(!$(this).is(":checked")) {
$("#all_checked").prop("checked", false);
}
});
}
});
});
原因是,从百度搜索的原因,jquery版本的区别:
attributes和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)。