1

为什么“返回错误;” 或“event.preDefualt();” 在 $.post(); 之后不起作用 首先,我只是在 . 之后写了一个 return 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??
            }
        });
    });
});

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

4

5 回答 5

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事件,您将无法真正做到这一点,因为重新提交表单将再次触发事件处理程序,您将陷入无限循环。

于 2012-10-23T08:59:58.610 回答
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;
    });
});
于 2012-10-23T09:00:13.253 回答
1

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

$('#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();
        }
    });
});
于 2012-10-23T09:02:40.477 回答
0

$.post(...)是异步的。试试$.ajax(async: false, ...)吧。

于 2012-10-23T09:00:14.220 回答
0

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

这个答案有一种您可以使用的技术 - 基本上在设置布尔标志以防止您的帖子逻辑被执行两次之后再次单击提交按钮。

于 2012-10-23T09:02:12.630 回答