仅当函数返回true时提交表单

3
我需要一种方法,只有在foo返回true时才能提交表单。我尝试了这段代码,但即使foo返回false,它也会提交表单。
<input type="submit" value="submit" onclick="return foo();" />
<script type="text/javascript">
    function foo() {
        // if... return true
        // else return false
    }
</script>

如果我使用onsubmit函数,那么它会首先提交。所以在我的情况下不好用。

不要在控制台中返回任何错误。 - xRobot
1
http://jsfiddle.net/arunpjohny/e4tdzme4/2/ - 看起来没问题 - 你能试着在这个fiddle中重现这个问题吗? - Arun P Johny
HTML5表单验证会自动完成这个任务吗? - xyz
我知道,但它也必须在旧浏览器上运行。 - xRobot
但更好的解决方案是使用表单的提交事件而不是点击事件处理程序 - http://jsfiddle.net/arunpjohny/e4tdzme4/3/ - Arun P Johny
显示剩余5条评论
3个回答

2
您可以尝试使用以下jquery ajax提交的替代方法,这是我正在使用的方法,可能对您有用...
 var request;
    $("#YourFormId").submit(function(event){

  if(yourFunction()==false) {
         return false;
     }

        if (request) {
            request.abort();
        }
       var $form = $(this);
       var $inputs = $form.find("input, select, button, textarea");
       var serializedData = $form.serialize();
       $inputs.prop("disabled", true);
       request = $.ajax({
            url: "yourFormActionPage.php",
            type: "post",
            data: serializedData
        }); 
        request.done(function (response, textStatus, jqXHR){
            //ok
        });

        request.fail(function (jqXHR, textStatus, errorThrown){
             //track it
        });

        request.always(function () {
            $inputs.prop("disabled", false);
        });

        event.preventDefault();
    });

1

一个可能的解决方案是使用表单的提交事件。你可以在提交事件处理程序中放置条件语句,这样当 foo() 不返回 true 时,提交就会停止。

(注意:由于您的问题中没有包含表单选择器,因此我不得不猜测可能的选择器)

document.getElementById('myForm').submit(function(e) {
  if (!foo()) {
    e.preventDefault(); 
  }
})

0

您可以使用Ajax提交。

<form class="formbox" method="post" action="/your/action/url" id="myForm" name="myForm">
                    <input type="text" id="name" class="name" name="name" value=""/>
                    <input type="submit" value="submit" onclick="return foo();" />                      
              </form>

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>

<script type="text/javascript">
function foo() {
    if(1==1) {
        alert("Success: Going to call the function");
        $("#myForm").submit(); //calling function.
    } else {
        alert("Error: ");
    }
}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接