你问我答(33)——jQeury实现限定上限的多选表单

jQeury在网页开发中非常有用,我们以前也说过几次,今天遇到一位读者的问题:

“老师好,请教一个js的问题!最近在做一个20选10的投票系统,客户要求每次投票的选项不能超过10个,超过10个就不能投票。(即小于或等于10),请问如何用js来检测每次投票的选项不能超过10个啊?谢谢!”

这里我就用jQeury来解决一下这位读者的问题,为了代码简单,我做一个共有5个备选选项,最多允许选择2项的例子。

首先写出HTML

1
2
3
4
5
6
7
    <div id="optionDiv">
        <input id="Checkbox1" type="checkbox" /> <label for="Checkbox1">选项A</label><br />
        <input id="Checkbox2" type="checkbox" /> <label for="Checkbox2">选项B</label><br />
        <input id="Checkbox3" type="checkbox" /> <label for="Checkbox3">选项C</label><br />
        <input id="Checkbox4" type="checkbox" /> <label for="Checkbox4">选项D</label><br />
        <input id="Checkbox5" type="checkbox" /> <label for="Checkbox5">选项E</label><br />
    </div>

HTML很简单,不再解释,接下来看一下jQuery的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
<script type="text/javascript" src="jquery.js" ></script>
<script type="text/javascript">
        $(pageLoaded);
 
        function pageLoaded() {
            $("#optionDiv input:checkbox").click(checkboxClicked);
        }
 
        function checkboxClicked() { 
           if ($("#optionDiv input:checkbox:checked").length > 2)
                      $(this).attr("checked", false);
        }
</script>

点击这里看一下效果演示。下面简单解释一下原理,上面代码中:

第1行的作用是引入jQeury库文件,第2~13行的作用就是实现5个选项中限制最多选两项的代码。

第3行中,“$”是一个jquey定义的函数,它的作用是定义在整个页面装载到浏览器以后,执行括号中指定的函数,也就是下面定义的pageLoaded函数。

第5~7行就定义了这个pageLoaded函数,函数执行的代码就是第8行中的内容,即首先选中id为optionDIV中所有checkbox元素,并为每一个选中的checkbox元素设定被鼠标单击时的行为,即执行括号中的函数,也就是checkboxClicked函数。

第9~12行就定义了checkboxClicked函数,其功能也很简单,但某个checkbox被单击以后,判断一下一共有多少个checkbox被选中了,如果这个数量大于2,那么就把当前点击的这个checkbox的checked属性,设置为false,这样这次点击就被取消了。

说明:

如果读者对上面代码还有不清楚的地方,请看看我们的视频教程:http://learning.artech.cn/category/javscript-jquery ,里面对Javascript和jQuery作了比较详细的讲解。

从上面代码中可以看到,Javascript不同传统的静态高级语言的一个地方是,它可以非常方便地把函数作为参数传递,这一点很灵活,上面的代码也可以写成下面的样子,效果完全相同。

1
2
3
4
5
6
        $(function() {
            $("#optionDiv input:checkbox").click(function() {
                if ($("#optionDiv input:checkbox:checked").length > 2)
                      $(this).attr("checked", false);
            });
        });
3,417


欢迎您发表留言

(须填写)
(须填写,不公开)
请注意:这里输入的HTML代码会被屏蔽,如果需要讨论复杂的具体代码问题,请到我们的论坛发贴,谢谢!

15条留言