为什么“回归虚假”或“event.preDefualt();” $ .post();后无效

时间:2012-10-23 08:54:55

标签: javascript jquery

为什么“返回假”;或“event.preDefualt();”在$ .post()之后不起作用; 首先,我简单地写了一个返回false  $(#id).submit(function(e){ return false;}// it works properly,但 当我通过$.post('check-email.php',{parameter},function{data})调用某些内容并尝试在$ .post调用之后写入return false。它不起作用并直接转到下一页。  这是我的代码: -

$(document).ready(function () { //newly added 
    $('#mysignupform').submit(function (event) {
        return false;
        or event.preDfault(); // only work here
        var emailVal = $('#inputEmail').val(); // assuming this is a input text field
        //alert(emailVal);
        $.post('check-email.php', {
            'email': emailVal
        }, function (data) {
            alert(data);
            if (data == 'false') {
                $("#mysignupform").submit(function (event) {
                    return false;
                    or event.preventDefault(); //both doesnt work here..why??
                    ;
                });
            } else {
                $("#mysingupform").submit(function () {
                    return false;
                }); //retrun false doesnt work here..why??
            }
        });
    });
});

我不想让他们提交,但仍然会发生。请帮我..! 提前谢谢..

5 个答案:

答案 0 :(得分:1)

因为$.post异步。在立即调用$.post之后的声明中继续执行。由于后面没有语句,submit事件处理函数将只返回undefined,浏览器将很乐意继续提交,就好像什么也没发生一样。

异步方法的回调只会在一段时间后执行。在您的情况下,这将是服务器返回响应的时间。由于外部函数已经返回,因此无法使用该回调函数将返回到

您需要始终阻止表单提交按钮上的click事件处理程序中的默认操作,然后在$.post回调成功后以编程方式重新提交表单:

$('#mysignupform :submit').click(function (event) {
    var form = this.closest("form"); // Get a reference to the containing form
    event.preventDefault(); // Prevent the default action (form submission)
    $.post('check-email.php', { /* data */ }, function (data) {
        // If the data is good...
        form.submit(); // Submit the containing form
    });
});

显然,如果你绑定到submit形式的事件,你就无法真正做到这一点,因为重新提交表单会再次触发事件处理程序,你将陷入无限循环

答案 1 :(得分:1)

这应该有效:

$(document).ready(function () { //newly added 
    $('#mysignupform').submit(function (event) {
        // your $.post call
        $.post('check-email.php', {email: emailVal}, function (data) {
            // ...
            // having a return false means returning false to the success callback
            // of your .post call. it is not the same as returning false to the 
            // submit() callback
        });

        // return false to submit()
        return false;
    });
});

答案 2 :(得分:1)

Ajax异步工作。简单的解决方案是在提交按钮上绑定click事件处理程序。

$('#your_submit_button').click(function (event) {
    event.preventDefault();
    var emailVal = $('#inputEmail').val(); // assuming this is a input text field
    $.post('check-email.php', {
        'email': emailVal
    }, function (data) {
        if (data !== 'false') {
            // submit the form here
            $("#mysingupform").submit();
        }
    });
});

答案 3 :(得分:0)

$.post(...)是异步的。请改为$.ajax(async: false, ...)

答案 4 :(得分:0)

这是因为在post完成之后执行的函数是异步执行的,即你不再在事件处理程序中。

This answer有一种技巧可以使用 - 在设置布尔标志后,基本上再次点击提交按钮,以防止你的帖子逻辑被执行两次。