Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 验证将数组作为名称参数的复选框_Javascript_Html - Fatal编程技术网

Javascript 验证将数组作为名称参数的复选框

Javascript 验证将数组作为名称参数的复选框,javascript,html,Javascript,Html,我曾经使用如下代码验证复选框表单: <div> <form action="survey.php" method="post" name="survey"> <span class="form"><input type="checkbox" name="event1" onClick="return countMarketing()">Event1</span> <span class"form"><in

我曾经使用如下代码验证复选框表单:

<div>
  <form action="survey.php" method="post" name="survey"> 
  <span class="form"><input type="checkbox" name="event1" onClick="return countMarketing()">Event1</span>
  <span class"form"><input type="checkbox" name="event2" onClick="return countMarketing()">Event2</span>
  <span class"form"><input type="checkbox" name="event3" onClick="return countMarketing()">Event2</span>
  <!-- other forms -->
  </form>
</div>
 <input type="checkbox" name="events[]" id="event1" onClick="return countMarketing()">Event1
这样的验证是有效的。但是现在,假设我使用php来提交,我如何在JS中检查表单名称是否如下:

<div>
  <form action="survey.php" method="post" name="survey"> 
  <span class="form"><input type="checkbox" name="event1" onClick="return countMarketing()">Event1</span>
  <span class"form"><input type="checkbox" name="event2" onClick="return countMarketing()">Event2</span>
  <span class"form"><input type="checkbox" name="event3" onClick="return countMarketing()">Event2</span>
  <!-- other forms -->
  </form>
</div>
 <input type="checkbox" name="events[]" id="event1" onClick="return countMarketing()">Event1

但是它不起作用。。有人能告诉我这件事吗?非常感谢:)

如果您确实在使用jQuery,您可以:

在使用此函数之前,请确保在文档中包含jQuery&在尝试运行该函数之前已加载文档

function countMarketing() {

  if( $('input[name="events[]"]').filter(':checked').length > 2 ) {
    alert('Please choose only two');
  }

}

首先删除
内联事件声明
,并将其移动到
外部Javascript文件
脚本块

您始终可以使用
括号表示法
访问这些属性

document.survey["events[]"]
代码

    var elems = document.survey,
    checkboxNames = ["event1[]", "event2[]", "event3[]"];

for (var i = 0; i < checkboxNames.length; i++) {
    bindClick(elems[checkboxNames[i]]);
}

function bindClick(elem) {
    elem.addEventListener('click', countMarketing);
}

function countMarketing() {

    var NewCountMarketing = 0
    var latest;
    for (var i = 0; i < checkboxNames.length; i++) {
        if (elems[checkboxNames[i]].checked) {
            latest = elems[checkboxNames[i]];
            NewCountMarketing++;
        }
    }

    if (NewCountMarketing == 3) {
        latest.checked = false;               
        alert('Please choose only two')
        document.survey;
        return false;
    }
}
var elems=document.survey,
checkboxNames=[“event1[],“event2[],“event3[]”;
对于(var i=0;i

您在使用jQuery吗?您有标签,但没有jQuery的代码。您是否尝试过
document.survey[“events[]”]
谢谢,我有一些jQuery用于一些幻灯片,但我对JS/jQuery非常陌生,如果它是jQuery解决方案也可以。顺便说一句,我确实试过这个,但它似乎不起作用,是不是因为我还需要声明表单名称?或者jQuery是否能够仅通过输入的名称来计算(假设有5个复选框输入,名称为
events[]
请确保包含jQuery&并将其包装在$(function(){})中);否则,它将在文档完全加载之前执行。使用此选项,您可以有任意多个复选框,只要它们的名称相同-无需表单名称。@GitKidd我已更新了我的答案,以向您展示如何在函数中使用它现在工作得很好,但我如何不允许第三个复选框继续进行真正的value?意思是,在警报弹出后,勾选的第三个复选框仍处于选中状态,应该是在警报弹出后,取消勾选第三个复选框。@GitKidd好的,对不起。在这种情况下,您可以执行此小提琴中的操作…因此,每当有人单击复选框时,即使它是#2且其他两个复选框都处于选中状态,也会取消选中您单击的复选框。谢谢@Sushan!我现在就试试这个,如果说我有5个复选框的名称为
events[]
,那么我需要在
checkboxNames
上更改什么(用于php表单提交)。我选中了小提琴,如何在弹出警报后取消选中最新框?因为警报后,第三个框的值仍处于选中状态。只需保留一个额外变量,并在检查计数时将其设置为false。检查更新的代码