2012-11-05 21 views
1

我有一系列使用php动态创建的表单。更改表单名称的表单验证

表单名称是使用php $ formcount变量创建的,并使用while循环递增。因此,对于创建的多个表单,表单名称将为: update1 update2 update3等。

我有一个下拉菜单在每个表单需要验证。我无法成功使用JavaScript来单独验证每个表单,因为表单的名称每次都在更改。

$formcount=0; 
while($info=mysql_fetch_array($agent_q)) 
{ 
...... 
echo(' 
<form name="update'.$formcount.'" method="post" onsubmit="return CheckUpdate(this);"> 
<select name="login_time" id="login_time"> 
<option value="none">Select Login</option> 
<option value="00:30">00:30</option> 
<option value="02:30">02:30</option> 
<option value="03:30">03:30</option> 
<option value="04:30">04:30</option> 
<option value="06:30">06:30</option> 
<option value="09:30">09:30</option> 
<option value="12:30">12:30</option> 
<option value="13:30">13:30</option> 
<option value="16:30">16:30</option> 
<option value="17:30">17:30</option> 
<option value="18:30">18:30</option> 
<option value="19:30">19:30</option> 
<option value="20:30">20:30</option> 
<option value="21:30">21:30</option> 
<option value="22:30">22:30</option> 
</select></form>'); 
..... 
} 

我的JS是

function CheckUpdate(){ 
    if(document.????==0){ 
    alert("Select Login Time!\r\n"); 
    return false; 
    } 
    else 
    return true; 
} 

不知道要放什么东西到位???的。我相信这是相当简单的..任何帮助都非常感谢。谢谢!

回答

1

有几种方法来处理它。可能最直接的(不必修改现有的PHP)将使用form.elements集合。在你的情况下,<select>elements[0]

// The form node is passed in the function call as (this) 
function CheckUpdate(node){ 
    // The first form element in the form node passed to the function is the <select> 
    // Test that a value other than the default is selected... 
    if (node.elements[0].value == 'none'){ 
     alert("Select Login Time!\r\n"); 
     return false; 
    } 
    else return true; 
} 

还有其他的方法来管理这一点。例如,如果总是只有<form>内一个<select>,但不一定在第一位置[0],你可以使用getElementsByTagName()检索它作为当前<form>

function CheckUpdate(node){ 
    var selNodes = node.getElementsByTagName('select'); 
    // Check the value of the first <select> child of the <form> (which was passed as node) 
    if (selNodes[0].value == 'none'){ 
     alert("Select Login Time!\r\n"); 
     return false; 
    } 
    else return true; 
} 

注意的子:在你的PHP循环,你是重复<select> id属性。这是不允许的 - id属性应该是唯一的。你可以追加你的$formcount

echo ' 
<form name="update'.$formcount.'" method="post" onsubmit="return CheckUpdate(this);"> 
<select name="login_time" id="login_time' . $formcount . '"> 
...; 
+0

有一个以上的输入字段的形式,选择在第四位......所以我尝试node.elements [3] .value的==“无',工作非常好:)。我不需要选择id属性,因为它没有达到任何目的,所以我删除了它。 是否有一个选项可以获取所有在表单函数中发送的所有转储?我知道有一个在PHP中:var_dump($ _ POST) – Chinnappa

0

试试这个

<form name="update'.$formcount.'" id="update'.$formcount.'" method="post" onsubmit="return CheckUpdate(this);"> 

function CheckUpdate(form){ 
    if(document.form.login_time.value == 0){ 
    alert("Select Login Time!\r\n"); 
    return false; 
    } 
    else 
    return true; 
} 
+0

试过但没有工作.. – Chinnappa