1

我的表单有一个输入,需要在提交之前进行验证。成功验证后,我尝试提交表单,但没有提交。

我的代码如下所示:

$(document).ready(function() {
    $("#myForm").submit(function () {
        checkInputData();
        return false;  // to prevent default submit
    });
});

验证功能:

function checkInputData() {
    var id = $($("#id")).val();  // value, which needs to be validated
    $.get("check.php?id=" + id,  
        function(result){  
            if(result == 1) {  
                //if the result is 1, need to submit
                $("#myForm").unbind(); // to prevent recursion?
                $("#myForm").submit(); // doesnt work
            } else {  
                // dont submit, give some visual feedback, etc...
            }  
    });
}

我究竟做错了什么?谢谢。

4

4 回答 4

4

您需要从 AJAX 验证请求中返回结果。您可以通过将此检查设置为 be 来做到这一点async: false,这意味着checkInputData()将等待结果返回,您可以将其返回,从而控制表单的提交。

在您的代码中,它不会等待$.get操作发生,并且它似乎会跳过,这意味着您的代码将始终出现return true;checkInputData()调用中。如果如下使用,则无需return false提交。

我使用了$.ajax调用代替,$.get因为它允许您控制async属性,但它本质上是做同样的事情。你可以在这里阅读更多关于它的信息。

function checkInputData() {
    var value = $("#id").val();  // Value to be validated
    var passedValidation = false;
    $.ajax("check.php?id=" + value, {
        async: false,
        success: function(result){
            // Do whatever check of the server data you need here.
            if(result == "1") {  
                // Good result, allow the submission
                passedValidation = true;
            } else {
                // Show an error message
            }
        }
    });
    return passedValidation;
}

$(document).ready(function() {
    $("#myForm").on("submit", function () {
        return checkInputData();
    });
});

我假设您在带有 id 的表单中有一个如下所示的按钮myForm

<input type="submit" value="Submit Form" />
于 2013-07-14T13:45:43.060 回答
0

AMember 是正确的,你总是返回 false,有一些解决方案。一种解决方案是将验证绑定到按钮元素或任何不会提交表单的元素。

HTML

<form id="myForm">
   .
   input elements
   .
   <button class= "submit" type="button" onclick="submit">Submit</button>
</form>

文件准备就绪

$(function() 
{
   var $submit = $(".submit");

   $submit.click(function () 
   {
     checkInputData();

   });
});

验证回调函数

function checkInputData() 
{
   var id = $('#id').val();  // value, which needs to be validated

   $.get("check.php?id=" + id, function(result)
   {  
        if(result == 1) 
        {
           var $myForm = $("#myForm");

            //if the result is 1 submit.
            $myForm.submit();
        } 
        else 
        {  
            // dont submit, give some visual feedback, etc...
        }  
   });

}

于 2013-07-14T13:58:11.753 回答
0

它没有被提交可能是因为你没有在下面1的成功验证中返回resultif condition

if(result == 1) {

check.php你的输出中应该是 1,就像echo '1';输入是有效的一样。并确保在它之前或之后没有任何其他输出。

于 2013-07-14T13:37:36.757 回答
-1
       $(document).ready(function() {
            $("#myForm").submit(function (e) {
                checkInputData();
                //return false;  // to prevent default submit <-- THIS IS WRONG


                e.preventDefault(); //Try this :)
            });
        });

返回 false 将阻止它在所有情况下提交。

于 2013-07-14T13:19:45.247 回答