我在php中有一个示例脚本,验证是使用javascript完成的。我在点击按钮时使用ajax脚本生成输入框。当我点击提交时,它会检查是否所有方框都已填满。 我正在使用for循环验证这些框。当这些框为空时,它会正确发出警报,并且我在同一个案例中返回false。但问题是当所有的盒子都被填满时,它不会返回任何东西,即使我在这种情况下返回true,函数也会停止工作。 我的带有函数的javascript代码如下所示
function addInput(){
var xmlhttp;
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
var result = xmlhttp.responseText;
var newElem = document.createElement ("div");
newElem.innerHTML = result;
newElem.id = "input";
var container = document.getElementById ("main");
container.appendChild (newElem);
}
}
xmlhttp.open("GET","insert.php",true);
xmlhttp.send();
}
var count = '<?php echo $_SESSION['z']; ?>'
function check(){
function validate()
{
for(var i=1; i<=count+10; i++)
{
if(document.getElementById("text"+i+"").value == "")
{
alert("Please Enter Start Date For Sales Promotion");
document.getElementById("text"+i+"").focus();
return 'false';
}
}
return 'abc';
}
var flag = validate();
if(flag != 'false')
{
alert("correct");
}
}
我的HTML代码如下所示
<form method="post" action="save.php">
<div id="main">
<div id="input1">
Enter Name </br></br>
<input type="text" id="text1" />
<?php $_SESSION['z'] = 2; ?>
</div>
</div>
</br>
<input type="button" value="add another" onclick="addInput()" />
<input type="button" value="Submit" onclick="check()" />
</form>
<div id="display"></div>
我的ajax代码如下所示
<?php
session_start();
$q = $_SESSION['z'];
?>
Enter Name </br></br>
<input type="text" id="text<?php echo $q; ?>" />
<?php $q = $q + 1;
$_SESSION['z'] = $q;
?>
问题是当所有字段都填满后它不会返回任何内容。
答案 0 :(得分:0)
这可能会发生很多,并且根据所使用的浏览器,click事件和提交事件将同时被调用,这是不安全的(例如,如果你的提交按钮调用另一个提交功能,在IE中,表格将提交两次......)
您应该将检查功能连接到表单的onBeforeSubmit事件。
答案 1 :(得分:0)
当您尝试检索页面上不存在的项目时,可能会出现错误。
if(document.getElementById("text"+i+"").value == "")
{
alert("Please Enter Start Date For Sales Promotion");
document.getElementById("text"+i+"").focus();
return 'false';
}
这里可能没有带有“text8”,“text9”等ID的项目。在这种情况下,当您尝试获取非现有元素的值时,将出现空引用错误。
尝试更改它:
var ele = document.getElementById("text"+i);
if(ele && ele.value == "")
{
alert("Please Enter Start Date For Sales Promotion");
document.getElementById("text"+i+"").focus();
return 'false';
}
这可以在访问其值之前验证ele
是否为空。