保持一致,不要;t重新加载


Stay on same page, don't reload

这里有两种形式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('','','');
        }

我的问题

  1. 当点击CheckUserId按钮时,我希望页面只停留在那里,为什么点击后它不会停留在同一页面上,所有字段都由用户填写。它应该只是执行检查,为什么要重新加载页面
  2. 如果我能够停留在同一个页面上,那么我不需要再次调用RegFormCrAndValid($name,$username,$email)这个函数来重建我的表单,是否可以停留在那里填写填充信息而不调用函数
  3. 我想消除使用假列再次显示用户名和姓名的现象,因为在真实的注册表中会有很多字段,我不能对所有字段都进行假调用或分配

我不想使用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" />