jQuery实现全选和取消全选插件
在前端开发中,经常会出现这种情况:单击某一复选框实现某一行或某一列的复选框在被选中或不 被选中的状态间切换。在没有jQuery之前,我们需要一大段js代码来实现这种效果。有了jQuery这个强大的库之后,我们可以很方便的开发实现这种 效果的jQuery插件。我将它命名为jQuery.fn.selectAll插件。
在构建我们的插件之前,我们想考虑一下其功能需求:
- 所有复选框的状态都随全选复选框的状态而发生变化;
- 如果所有复选框都被选中时,全选复选框立即处于选中状态;
- 如果当前选中复选框的数量小于复选框的总数时,全选复选框立即处于非选中状态;
所以,在那些处于全选复选框控制之下的复选框全被点击时,就需要时刻判断当前被选中复选框的 个数,从而决定全选复选框是否被选中。
该插件有一到两个参数:
- range 定义所有需要进行操作的上下文背景;
- func 一个处理函数,参数为当前选中的复选框的数量。
即:
1.var settings = {2. range:'',3. func:null4.};接下来要做的是:给所有复选框绑定click事件。在绑定事件之前,先得到除全选复选框之外 的所有复选框以及数量。
1.var checks = $('input[type="checkbox"]',settings.range);2. var sizes = checks.size();对于全选复选框,绑定事件如下:
1.$(“#checkAll”).attr('checked','').click(function(){2. var isCheck = $(this).attr("checked");3. $(this).checks.attr('checked',isCheck);4. var checkedSize = $('input[type="checkbox"]:checked',settings.range).size();5. if($.isFunction(settings.func)){6. settings.func(checkedSize);7. }8. })对于其他复选框,事件如下:
01.checks.click(function(){02. var checkedSize = $('input[type="checkbox"]:checked',settings.range).size();03. if(checkedSize < self.sizes){04. self.attr('checked','');05. }else{06. self.attr('checked','checked');07. }08. if($.isFunction(settings.func)){09. settings.func(checkedSize);10. }11. })完整代码如下:
01.(function(){02.$.fn.selectAll = function(options){03. var settings = {04. range:'',05. func:null06. };07. return this.each(function(){08. if(options) settings = $.extend(settings, options);09. var self = $(this);10. var checks = $('input[type="checkbox"]',settings.range);11. var sizes = checks.size();12. $(this).click(function(){13. var isCheck = $(this).attr("checked");14. checks.attr('checked',isCheck);15. var checkedSize = $('input[type="checkbox"]:checked',settings.range).size();16. if($.isFunction(settings.func)){17. settings.func(checkedSize);18. }19. })20. checks.click(function(){21. var checkedSize = $('input[type="checkbox"]:checked',settings.range).size();22. if(checkedSize < sizes){23. self.attr('checked','');24. }else{25. self.attr('checked','checked');26. }27. if($.isFunction(settings.func)){28. settings.func(checkedSize);29. }30. })31. })32.}33.})(jQuery)





