2016-04-15 121 views
2

我有一个表单页面,我打算使用Ajax进行提交。我的计划是 1.检查电子邮件已经存在使用Ajax 2.检查口令一致 3.如果是的话,切换到另一个“屏幕”和 4.使用AjaxAjax回调未执行

我提交表单困惑,因为验证功能不运行。当密码不匹配时,它既不切换屏幕也不警告。因此,表单也未提交。我的代码低于

$('form input:last-child').click(function(e){ 
    e.preventDefault(); 
    var allFields = e.target.parentNode; 

    function validate() { 
     if (allFields.elements[3].value !== allFields.elements[4].value) { 
      return false; // If they don't match, return false 
     } else { 
      $('#form-div form').css('left', '-70%'); 
      $('#confirm p').css('margin-left', '-12%'); // else switch screens 
     } 
    } 
    if (validate != false) { 
     $('#hidden').load("server_script.php"); // `hidden` is a hidden div somewhere on the page 
    } else 
     alert ("Passwords do not match"); 
}); 

我在想,如果他们不匹配,事件侦听器的其余部分将无法运行,因为虚假的终止从该点的功能。所以我试着在事件监听器之外创建一个validate函数的实例,并在click函数内部调用它,但是它不会因为依赖变量而解析,所以我不确定如何去做这件事。

UPDATE 附带相关的HTML。 (加成:正则表达式模式不匹配2首或更多个字母)

<div id=form-div> 
<form method=POST action="" > 
First Name: <br> <input type=text name=first_name pattern="[a-z]{2,}" required /> <br> <br> 
Last Name: <br> <input type=text name=last_name pattern="[a-z]{2,}" required /> <br> <br> 
Email: <span id=emailReport></span> <br> <input type=email name=email id=email required /> <br> <br> 
Password: <br> <input type=password name=password required pattern=".{6,}" title="Password must be six or more characters" /> <br> <br> 
Confirm password: <br> <input type=password name=password required /> <br> <br> 
<input type=hidden name=sign_up_date /> 
<input type=submit value='sign up' /> 
</form> 

<div id=confirm> <p>Some text</p> </div> 
</div> 

</div> 
+0

没有相关的HTML其难度是任何援助 – RiggsFolly

+0

什么是'验证!= false'? –

+0

@RiggsFolly添加了html –

回答

1

您忘记了调用'验证'功能。 就像你的代码似乎你只是声明了这个函数而没有执行它。

+0

其实他认为如果你看起来更接近 – RiggsFolly

0

validate的功能不被调用。为什么不简单地删除函数定义,以便代码是click函数的一部分?

+0

如果我解开它,我怎么测试不相似的密码? –

+0

你可以将它作为一个独立的函数移动到'click'函数之外,并将值作为参数传入:'function validate(pass1,pass2)' – yk11

1

你是不是调用验证功能正确

函数调用必须有()validate()而不是validate

$('form input:last-child').click(function(e){ 
    e.preventDefault(); 
    var allFields = e.target.parentNode; 

    function validate() { 
     if (allFields.elements[3].value !== allFields.elements[4].value) { 
      return false; // If they don't match, return false 
     } else { 
      $('#form-div form').css('left', '-70%'); 
      $('#confirm p').css('margin-left', '-12%'); // else switch screens 
     } 
    } 

    //if (validate != false) { 
    if (validate() != false) { 
     $('#hidden').load("server_script.php"); // `hidden` is a hidden div somewhere on the page 
    } else 
     alert ("Passwords do not match"); 
}); 
+0

我添加了括号,但脚本不加载任何方式。原来的'validate'没有运行的原因是,我没有把它叫做单独的一行。请检查接受的答案 –

+0

这将调用'validate()'函数,假设这段代码实际上被调用。你是说整段代码没被调用? – RiggsFolly