最近项目中,要用到互斥的Checkbox,所以自己写了个方法:
1.首先是用如下方法:
$(':checkbox[name=users]').each(function(){
$(this).click(function(){
if($(this).attr('checked')){
$(':checkbox[name=users]').removeAttr('checked');
$(this).attr('checked','checked');
}
});
});
发现这样写的代码重用性很差,所以,做如下改进
(function(){
$.fn.extend({
checked_unchecked:function(){
var _self = this;
if(this!=undefined && this!=null){
this.each(function(){
$(this).live("click",function(){
if($(this).attr('checked')){
_self.removeAttr('checked');
$(this).attr('checked','checked');
}
});
});
}
}
});
})(jQuery);
调用:
$(function(){
$(':checkbox[name=checkbox2]').checked_unchecked();
$(':checkbox[name=checkbox3]').checked_unchecked();
});
如果有版本的问题,需要作以下改动:
/**
* CheckBox的互斥选择插件
*/
(function(){
$.fn.extend({
checked_unchecked:function(){
if(this!=undefined && null!=this){
var _self = this;
this.each(function(){
/**
* 判断当前使用的JQuery的版本是否是>=1.9
* 因为1.9以上的版本中移除了live方法
* 获取Checkbox的checked属性也建议使用prop
*/
if($.fn.jquery>="1.9"){
$(this).on("click",function(){
if($(this).prop("checked")==true){
_self.prop("checked",false);
$(this).prop("checked",true);
}
});
}else{
$(this).live("click",function(){
if($(this).attr('checked')){
_self.removeAttr('checked');
$(this).attr('checked','checked');
}
});
}
});
}
}
});
})(jQuery);