首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么复选框中的限制不起作用?

为什么复选框中的限制不起作用?
EN

Stack Overflow用户
提问于 2013-05-17 14:42:46
回答 3查看 137关注 0票数 2

我需要将选中复选框的数量限制为三个,但它不起作用。

这是我的代码:

代码语言:javascript
复制
<script type="text/javascript"> 
function chkcontrol(j) {
   var total=0;
   for(var i=0; i < document.form1.ckb.length; i++){
      if(document.form1.ckb[i].checked){
         total =total +1;}
      if(total > 3){
         alert("Please Select only three"); 
         document.form1.ckb[j].checked = false ;
         return false; }
   }
}
</script>

    <form name="form1">
<input type="checkbox" name="ckb[]" value="0" onclick="chkcontrol(0);">
<input type="checkbox" name="ckb[]" value="1" onclick="chkcontrol(1);">
<input type="checkbox" name="ckb[]" value="2" onclick="chkcontrol(2);">
<input type="checkbox" name="ckb[]" value="3" onclick="chkcontrol(3);">    
    </form>   

你可以在in this Fiddle上测试它。

如果我使用name="ckb"而不是name="ckb[]",它确实可以工作,但我需要使用name="ckb[]",因为在PHP中,我有以下代码来提取值:

代码语言:javascript
复制
   foreach($_POST['ckb'] as $value){

   }
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-05-17 14:47:17

我可以建议一个更好的方法来处理这个问题吗?

代码语言:javascript
复制
var form = document.getElementsByName("form1")[0];

form.addEventListener("click", function(event) {
     if (event.target.tagName != "INPUT" || event.target.type != "checkbox") {
         return;
     }

     var checked = form.querySelectorAll("input[type='checkbox']:checked");

     if (checked.length > 3) {
           event.target.checked = false;
     }

});

jsFiddle

  • 你不应该真的使用内联事件处理程序,当它们不是必需的时候,你现在有4个复选框,所以我通过只附加一个事件监听器
  • 来处理表单上的事件,你可能会发现使用更现代的方法来选择元素也更容易
票数 1
EN

Stack Overflow用户

发布于 2013-05-17 14:44:37

您正在循环遍历名为ckb的表单控件,但您没有它们。您的控件的名称是ckb[]

您需要使用ckb[]作为属性名称。

由于标识符中不允许使用[],因此必须使用方括号表示法。

form1['ckb[]']

票数 1
EN

Stack Overflow用户

发布于 2013-05-17 15:22:05

你需要做的几件重要的事情-

  1. this对象作为参数传递给函数。这样你就有了一个更好的控件,而不需要在你的code.
  2. var total中使用chkb[],所以你不需要每次都循环。
  3. 你需要确保其他复选框集(不属于chkb[])不受你的代码的影响。
  4. onclick更改为onchange。你还需要你的网站对键盘活动做出回应。

查看我的解决方案- jsFiddle

代码语言:javascript
复制
<script type="text/javascript">
var total=0;
function chkcontrol(chkb) {
   if(chkb.checked){
     if(total >= 3 ){
         chkb.checked=false;    
         alert("Please Select only three");
      } else{
         total=total+1;
      } 
    } else {
        total=total-1;
    }
}
</script>

<form name="form1">
<input type="checkbox" name="ckb[]" value="0" onchange="chkcontrol(this);">
<input type="checkbox" name="ckb[]" value="1" onchange="chkcontrol(this);">
<input type="checkbox" name="ckb[]" value="2" onchange="chkcontrol(this);">
<input type="checkbox" name="ckb[]" value="3" onchange="chkcontrol(this);">    
</form>    
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16603004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档