Jquery form check returns true, but need to return false

前端 未结 2 1973
眼角桃花
眼角桃花 2020-12-20 01:34

I am running this form check when the form is submitted:

if((formData[4].value == 1 || formData[4].value == 2) && !formData[2].value) { 
    alert(\'         


        
相关标签:
2条回答
  • 2020-12-20 02:00

    The problem is that the AJAX request happens asynchronously — it calls your success function after the outer function returns true. It is the success function (not your outer function) returning false, which has no bearing on whether the form will submit or not.

    You will have to always return false from that outer function, and then in the AJAX success function, if the validation succeeds, unbind the initial submit handler and use the .submit() method of the form to submit the form normally:

    (In these code samples, I assume that form is a jQuery object that wraps the underlying DOM element of the form.)

    success: function(data) {
        if(data == 1) {
            alert('Key already exists');
        } else {
            form.unbind('submit'); // Prevent the AJAX validation from happening again
            form.submit(); // Submit the form normally
        }
    }
    

    Alternatively, you can call the browser's native form.submit() method and the "unbind" line will not be necessary:

    form[0].submit();
    
    0 讨论(0)
  • 2020-12-20 02:02

    A return in the callback returns from that callback, not the parent function like you want...however you can get the effect you want, like this:

    if((formData[4].value == 1 || formData[4].value == 2) && !formData[2].value) { 
        alert('Please fill out the key field');
        return false;
    } else {
        $.ajax({
            url: "/ajax/key_check.php",
            cache: false,
            data: "key=" + formData[4].value,
            dataType: "html",
            success: function(data) {
                if(data == 1) {
                    alert('Key already exists');
                } else {
                  $("#someForm")[0].submit();
                }
            }
        });
        return false;
    }
    

    What this does is never submit directly, but if the check is ok, calls the *native .submit() method, submitting the form and not running this handler again.

    0 讨论(0)
提交回复
热议问题