使用 javascript 捕获数组并使用数组的值
Catching an array with javascript and working with the values of the array
我有以下表格:
echo '<form method="post" id="myForm" onsubmit="return formComp()">';
foreach($array as $value){
echo '<input type="checkbox" name="check[]" value="$value">';
}
echo '<input type="submit" name="ok" value="OK">';
echo '</form>';
和 javascript:
function formComp(){
var theForm=document.getElementById("myForm");
var a = theForm.elements['check[]'];
for( var i=1; i<a.length; i++){
if(!a[i].checked){
alert('Select an option');
return false;
}
else{
return true;
break;
}
}
}
我正在捕获一个 php 数组,并在循环中使用它,这样我就可以检查每个选项是否满足要求(如果已检查)。问题是它甚至不会停止如果我检查 option.When,至少检查了一个选项,我需要循环停止并且 return 为真,所以它可以提交。
编辑: 顺便说一句,当我检查每个 option.But 时,函数 return 为真我做不到 return至少选中一个时为真。
您的代码主要是这样做的,但它会跳过第一个输入,如果发现未检查的内容,它会 returns false
;相反,它应该继续检查:
function formComp(){
var theForm=document.getElementById("myForm");
var a = theForm.elements['check[]'];
for( var i=0; i<a.length; i++){ // Start at 0, not 1
// Don't do anything here if unchecked
if(a[i].checked){ // We found a checked one, so
return true; // we can return true now
// No `break` here
}
}
alert('Select an option'); // NOW tell them to choose something...
return false; // ...and return false, since none are checked
}
示例:
function formComp(){
var theForm=document.getElementById("myForm");
var a = theForm.elements['check[]'];
for( var i=0; i<a.length; i++){
if(a[i].checked){
return true;
}
}
alert('Select an option');
return false;
}
function test() {
var rv = formComp();
alert("formComp result: " + rv);
}
<form id="myForm">
<input type="checkbox" name="check[]" value="1">
<input type="checkbox" name="check[]" value="2">
<input type="checkbox" name="check[]" value="3">
<input type="checkbox" name="check[]" value="4">
<input type="button" value="Test" onclick="test()">
</form>
问题是您仅在检查所有元素时才中断循环。这会导致 alert()
垃圾邮件。
function formComp(){
var theForm=document.getElementById("myForm");
var a = theForm.elements['check[]'];
var isnotchecked = 0;
for( var i=0; i<a.length; i++){
if(!a[i].checked){
isnotchecked = 1;
break;
}
}
if(isnotchecked){
alert('at least one of em is not checked!');
return false;
}else{
return true;
}
}
或者,如果必须检查提交:
function formComp(){
var theForm=document.getElementById("myForm");
var a = theForm.elements['check[]'];
var ischecked = 0;
for( var i=0; i<a.length; i++){
if(a[i].checked){
ischecked = 1;
break;
}
}
if(ischecked){
return true;
}else{
alert('select at least one option!');
return false;
}
}
我有以下表格:
echo '<form method="post" id="myForm" onsubmit="return formComp()">';
foreach($array as $value){
echo '<input type="checkbox" name="check[]" value="$value">';
}
echo '<input type="submit" name="ok" value="OK">';
echo '</form>';
和 javascript:
function formComp(){
var theForm=document.getElementById("myForm");
var a = theForm.elements['check[]'];
for( var i=1; i<a.length; i++){
if(!a[i].checked){
alert('Select an option');
return false;
}
else{
return true;
break;
}
}
}
我正在捕获一个 php 数组,并在循环中使用它,这样我就可以检查每个选项是否满足要求(如果已检查)。问题是它甚至不会停止如果我检查 option.When,至少检查了一个选项,我需要循环停止并且 return 为真,所以它可以提交。
编辑: 顺便说一句,当我检查每个 option.But 时,函数 return 为真我做不到 return至少选中一个时为真。
您的代码主要是这样做的,但它会跳过第一个输入,如果发现未检查的内容,它会 returns false
;相反,它应该继续检查:
function formComp(){
var theForm=document.getElementById("myForm");
var a = theForm.elements['check[]'];
for( var i=0; i<a.length; i++){ // Start at 0, not 1
// Don't do anything here if unchecked
if(a[i].checked){ // We found a checked one, so
return true; // we can return true now
// No `break` here
}
}
alert('Select an option'); // NOW tell them to choose something...
return false; // ...and return false, since none are checked
}
示例:
function formComp(){
var theForm=document.getElementById("myForm");
var a = theForm.elements['check[]'];
for( var i=0; i<a.length; i++){
if(a[i].checked){
return true;
}
}
alert('Select an option');
return false;
}
function test() {
var rv = formComp();
alert("formComp result: " + rv);
}
<form id="myForm">
<input type="checkbox" name="check[]" value="1">
<input type="checkbox" name="check[]" value="2">
<input type="checkbox" name="check[]" value="3">
<input type="checkbox" name="check[]" value="4">
<input type="button" value="Test" onclick="test()">
</form>
问题是您仅在检查所有元素时才中断循环。这会导致 alert()
垃圾邮件。
function formComp(){
var theForm=document.getElementById("myForm");
var a = theForm.elements['check[]'];
var isnotchecked = 0;
for( var i=0; i<a.length; i++){
if(!a[i].checked){
isnotchecked = 1;
break;
}
}
if(isnotchecked){
alert('at least one of em is not checked!');
return false;
}else{
return true;
}
}
或者,如果必须检查提交:
function formComp(){
var theForm=document.getElementById("myForm");
var a = theForm.elements['check[]'];
var ischecked = 0;
for( var i=0; i<a.length; i++){
if(a[i].checked){
ischecked = 1;
break;
}
}
if(ischecked){
return true;
}else{
alert('select at least one option!');
return false;
}
}