【问题标题】:Ajax callback not executingAjax 回调未执行
【发布时间】:2016-04-15 16:30:26
【问题描述】:

我有一个打算使用 Ajax 提交的表单页面。我的计划是 1. 使用 Ajax 检查电子邮件是否已经存在 2.检查密码是否匹配 3.如果是,切换到另一个“屏幕”并 4. 使用Ajax提交表单

我很困惑,因为验证功能没有运行。当密码不匹配时,它既不会切换屏幕也不会发出警报。因此,表单也不会被提交。我的代码在下面

$('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");
});

我在想,如果它们不匹配,则事件侦听器的其余部分将不会运行,因为 false 从那时起终止函数。所以我尝试在事件监听器之外创建一个 validate 函数的实例,并在 click 函数中调用它,但由于依赖变量它不会解析,所以我不知道该怎么做。

更新 附上相关的 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>

【问题讨论】:

  • 没有相关的 HTML 就很难得到任何帮助
  • 什么是validate != false
  • @RiggsFolly 添加了 html
  • @u_mulder 我正在尝试检查 validate 函数的输出是否没有返回 false。如果是这样,那么运行下面的代码
  • 合理的代码缩进使代码更容易阅读,但对调试有更多帮助

标签: javascript php jquery ajax


【解决方案1】:

您忘记调用“验证”函数。 从您的代码看来,您只是声明了该函数而没有执行他。

【讨论】:

  • 其实如果你仔细看,他以为他在叫它
【解决方案2】:

validate 函数未被调用。为什么不简单地删除函数定义,使代码成为click 函数的一部分?

【讨论】:

  • 如果我打开它,我如何测试不相似的密码?
  • 您可以将其作为独立函数移出click 函数,并将值作为参数进行比较:function validate(pass1, pass2)
【解决方案3】:

您没有正确调用验证函数

函数调用必须有(),即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");
});

【讨论】:

  • 我添加了括号,但脚本没有加载任何方式。原始validate 没有运行的原因是,我没有在单独的行上调用它。请检查接受的答案
  • 这将调用 validate() 函数,假设这整个 js 代码部分实际上正在被调用。你是说这段代码没有被调用??
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-20
  • 2012-06-22
  • 2020-04-13
  • 1970-01-01
  • 2015-05-20
  • 1970-01-01
相关资源
最近更新 更多