这里有两种形式fregister和register。在第一个表单中,我输入了名称、用户名,并通过单击"检查用户id"按钮来检查用户名的可用性。如果用户名不可用,我将在php的帮助下显示消息,并希望将此消息显示给用户,其中包含他之前填写的字段。
<?php RegFormCrAndValid($name,$username,$email) {?>
<form name="fregister" method="post">
<table>
<tr><td>Name</td>
<td><input type="text" id="name" name="name" value ="<?php echo $name;?>" onChange="ValidAllAlpha()" required></td>
<td><span id="ErrorName"></span></td></tr>
<tr><td>Username</td>
<td><input type="text" id="user" name="UsrText" value="<?php echo $user;?>" required onblur="SetNextElement()"></td>
<td><?php echo $_SESSION['ErrorUserMsg']?></td> <td><input type="submit" name="CheckUsr" value="Check User ID"></td> </tr> </form>
在第二种形式中,用户将在这里注册,首先检查可用性,然后单击注册进行提交。在这个表单中,如果用户还没有成功注册,那么我想显示带有填充字段的消息。
<form name="register" method="post">
<td style="display:none"><input type="text" id="fname" name="fname" required></td>
<td style="display:none"><input type="text" id="fuser" name="fuser" required></td>
<tr><td>Email</td>
<td><input type="email" id="email" name="email" value="<?php echo $email;?>" onChange="ValidateEmail()" required></td>
<td><span id="ErrorEmail"></span></td></tr>
<tr><td><input type="submit" name="submitForm" value="Submit" onClick="ValidationCheckOnSubmit('register');return false;"></td></tr>
</form>
</body>
</html>
这里没有显示两行,因为它们在javascript的帮助下从表单fregister中获取name和username的值,然后显示它们。
JavaScript代码//验证存在,这里我提到的是将值传递给fname和fuser 的代码
function SetNextElement()
{
document.getElementById('fname').value = document.getElementById('name').value;
document.getElementById('fuser').value = document.getElementById('user').value;
}
<?php }?> //RegFormCrAndValid($name,$username,$email) this function getting closed over here
php编码
if(isset($_POST['CheckUsr']))
{
if(IsUsernameAvail($_POST['UsrText'])) //IsUsernameAvai checking for the username availabilty return true if available as false
{
$_SESSION['ErrorUserMsg']="<font color=red>This Username Is Available</font>";
}
else
{
$_SESSION['ErrorUserMsg']="<font color=red><--Username is not available</font>";
}
}
if(isset($_POST['submitForm']))
{
if(IsUsernameAvail($_POST['fuser']))
{
echo 'You have been successfully registered';
}
else
{
$_SESSION['ErrorUserMsg']="<font color=red><--Username is not available</font>";
RegFormCrAndValid($_POST['fname'],$_POST['fuser'],$_POST['email']);
//RegFormCrAndValid($name,$username,$email) is the function in which whole html and javascript code is there to create and validate the form.
}
}
else{ if(isset($_POST['CheckUsr']))
{
RegFormCrAndValid($_GET['name'],$_POST['UsrText'],'');
}
else RegFormCrAndValid('','','');
}
我的问题
- 当点击CheckUserId按钮时,我希望页面只停留在那里,为什么点击后它不会停留在同一页面上,所有字段都由用户填写。它应该只是执行检查,为什么要重新加载页面
- 如果我能够停留在同一个页面上,那么我不需要再次调用RegFormCrAndValid($name,$username,$email)这个函数来重建我的表单,是否可以停留在那里填写填充信息而不调用函数
- 我想消除使用假列再次显示用户名和姓名的现象,因为在真实的注册表中会有很多字段,我不能对所有字段都进行假调用或分配
我不想使用ajax或jquery,想通过javascript、php和html实现一切。
当您单击<input type="submit" name="CheckUsr" value="Check User ID">
时,表单正在提交,因为单击提交按钮就是这样做的,除非您有javascript来阻止它并做其他事情。
当页面被提交回服务器时,该页面将重新加载。
现在,转到您的基本目标:您必须明白,您正在进行的确定用户名是否可用的实际检查是在服务器端,也就是说,逻辑驻留在服务器上。然而,用户在其上键入用户名的表单位于客户端,该表单位于用户计算机上,通过浏览器显示。现在,一旦用户键入名称,您就需要以某种方式将数据传递给服务器端,以便它进行检查并执行相应的操作。因此,您有两种选择:
a) 按照现在的方式提交表单,并使用服务器端的php代码收集用户填写的所有数据,然后再次填充回
b) 不要提交表单,只需向php脚本发出ajax请求,该脚本将用户名作为输入,并返回一个true或false响应,您可以使用javascript捕获该响应,从而允许提交或不提交表单。
在这种情况下,在提交按钮onclick事件或表单onsubmit事件触发器上设置一个javascript函数,使ajax请求为false,如果ajax请求返回false则设置"return false",如果ajax要求返回true则设置"return true"。此外,在"false情况"下,您可以使用getElementById为用户设置错误消息。
(a)的答案
您正在使用表单提交操作
表单提交的默认行为是重新加载页面。您必须使用return false
来抑制表单提交的默认行为。但不建议这样做。。你可以使用AJAX
样本代码
$('#yourFormId').submit(function () {
//business logics here
return false;//to avoid page reload
});
您不再需要提交按钮上的onclick事件:
<input class="submit" type="submit" value="Send" />