2014-09-29 134 views
0

我在JSP页面中动态创建的复选框如下复选框验证在JavaScript中没有对单个复选框

<form name="CancelForm" onsubmit="return validate();" action="ServletCancel" method="post">     
<% 
for(int index=0 ; index<lstID.size() ; index++) 
{ 
    String strBookingID = lstID.get(index); 
%> 
<input type="checkbox" name="BookingID" value="<%=strBookingID%>"> 
<% 
}%> 
<input type="submit" value="Cancel" class="button1"/> 
</form> 

为了验证同我有下面的JavaScript代码来验证在Form ATLEAST一个复选框被选中,如果是这样,它应该返回“真”或其他“假”,并至少检查一个选项。

function validate() { 
    var flag = "false"; 
    var CHKBBookingID = document.CancelForm.BookingID; 

    alert("length of checkboxes >> "+CHKBBookingID.length) 
    for (var i = 0; i < CHKBBookingID.length ; i++) { 
     if (CHKBBookingID[i].checked == true) { 
      flag = "true"; 
     } 
    }  
    if(flag == "false"){ 
     alert("You have not selected any passenger yet!"); 
     return false; 
    } else { 
     return true; 
    } 
} 

此验证正在工作如果我在表单中有两个或多个复选框,那么这个验证非常好。
但是,如果我只有一个复选框另一方面验证警报显示为“不确定”,以及即使窗体上唯一的复选框被选中

回答

2
var CHKBBookingID = document.CancelForm.BookingID; 

导致失败复选框的“长度”问题。如果您将它命名为var,则将其视为变量,因为您传递了单个元素。

,所以你需要初始化javascript阵列,

var CHKBBookingID = Array(document.CancelForm.BookingID) 

将其输入到数组

Learn More. .

更新:

使用jquery可以轻松获得数复选框,

var CHKBBookingID = new Array(); 
$.each($("input[name='BookingID[]']:checked"), function() { 
    values.push($(this).val()); 
    // or you can do something to the actual checked checkboxes by working directly with 'this' 
    // something like $(this).hide() (only something useful, probably) :P 
}); 
+0

非常感谢@San它正在工作。 – InCh 2014-09-29 12:26:37

+0

很高兴我可以帮助:) – 2014-09-29 12:30:35

+0

这听起来很有趣,但现在它不适用于多个复选框...不管复选框的数量是多少,它显示长度为1,如果存在多于1复选框,则失败并检查 – InCh 2014-09-29 13:07:25