我有一个学生列表,每个学生都有复选框。现在,我必须运行批处理,但在发送该请求之前,我需要能够在检查至少一个复选框时继续执行请求。
到目前为止我的JS功能代码是:
function batchOPTAllocate(){
var pid = encodeURIComponent(document.getElementById('alOptList').value);
var proceed = 0;
var elements = document.getElementsByName('stid[]');
var data = [];
for (var i = 0; i < elements.length; i++){
if (elements[i].checked){
data.push('stid[]='+elements[i].value);
} else{
proceed = 1;
alert("You are required to select at least one student.");
break;
}
}
if(proceed === 0){
params = "&paper="+pid+"&"+data.join('&');
if (window.XMLHttpRequest)
{
xmlhttp=new XMLHttpRequest();
}
else
{
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
// some code here...
}
}
xmlhttp.open("POST","batch.php",true);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.send(params);
}
}
如果上述代码均匀,如果选中其中一个复选框,则仍然会发出警报。
答案 0 :(得分:2)
如果选中某个项目,您似乎要向数组data
添加元素。为什么不将警报移出for循环并仅在data
的长度为零时调用它?
这样的事情:
if(data.length == 0)
{
// alert
}else{
// carry on
}
答案 1 :(得分:0)
即使只选中一个复选框,您的代码也会发出警报,因为所需要的只是进入您的其他区块一次,然后继续将不再是0
答案 2 :(得分:0)
你的逻辑有点倾斜,因为它在第一个非检查项目中止
for (var i = 0; i < elements.length; i++){
if (elements[i].checked){
data.push('stid[]='+elements[i].value);
} else{
proceed = 1;
alert("You are required to select at least one student.");
break;
}
}
我会用:
var proceed = 0;
for (var i = 0; i < elements.length; i++){
if (elements[i].checked){
data.push('stid[]='+elements[i].value);
proceed++;
}
}
if( proceed != 0 ) {
alert("You are required to select at least one student.");
break;
} else {
//--- process students
}