如何在JQuery Ajax验证后提交表单?

时间:2011-06-20 03:05:48

标签: php jquery ajax

我无法使.submit()jquery函数正常工作我已将我的代码中的所有内容归结为:

  <form action="/server/addserver.php" method="post" accept-charset="utf-8" id="mainform"><input type="text" name="test" value=""  /><input type="submit" name="submit" value="Submit" id="submitbutton" /></form>

<script type="text/javascript">
    $("#submitbutton").click(
    function(){
         $("#mainform").submit();
             return false;
    });
</script>

对我来说这应该是1 - 停止按钮的默认行为然后2 - 手动提交表单。

如果换掉.submit();用.hide();这样可行。这不是首次运行某些ajax验证后手动提交表单的首选方法吗?

由于

2 个答案:

答案 0 :(得分:4)

你可以这样做:

$(function () {
    $('#mainform').submit(function () {
        if (isFormValid()) { // do your validation
            return true;
        }
        return false;
    });
});

这将在提交表单时运行(只需使用普通的<input type="submit" />按钮)。在此处返回false将阻止页面发布。

如果您想将事件绑定到按钮,请尝试如下:

$(function () {
    $('#submitbutton').click(function () {
        if (isFormValid()) { // do your validation
            $('#mainform').submit();
        }
        return false;
    });
});

答案 1 :(得分:2)

首先,我认为你应该注意几件事情:

  1. 无论何时,只要您想要将事件绑定到DOM元素,就应该确保页面已完全加载。如果有疑问,请将您的代码包装在

    $(document).ready(function() { /* code to execute after page load */ });
    中。

  2. 此外,如果输入[type =“submit”]元素的 name 属性,则 .trigger(“submit”)方法不起作用设置为“提交”值。由于 .submit()被调用而没有参数是 .trigger('submit')的快捷方式,然后你随时调用JQuery的 .submit()对元素的方法,你要确保并指定输入的名称除了“提交”以外的其他内容。

  3. 现在,回答你的问题;首先关于返回 false 是否是手动提交表单的首选方式,答案通常是否定的。原因是返回 false 会做三件事,而你通常不想做所有这些事情。它会阻止事件的默认浏览器行为,它还会阻止事件冒泡,并立即返回,退出该函数。通常,您可能只想要 event.preventDefault() event.stopPropagation() ...甚至取消绑定该事件。在这种情况下,在我看来,返回错误而不是调用适当的晚间方法似乎混淆了你的代码的意图。

    如果您还需要阻止 submit 事件的默认浏览器操作,您可以使用JQuery的备用触发器方法:

    $('#mainform').triggerHandler('submit');
    
    。 但是,在没有错误的情况下,验证器方法本身可能应该是您调用 form.submit()的位置。它也应该是你处理表单提交的地方,因为它是守门人,可以这么说。

    总而言之,如果你要使用Validator插件,你应该遵循它自己的约定。确保表单通过将 name =“submit”添加到您的提交按钮来执行默认提交,然后删除您拥有的所有JQuery代码并将其替换为Validator文档中的此示例:

    $("#mainform").validate({
     submitHandler: function(form) {
       form.submit(); // Don't use a JQuery selector here, just "form"
     }
    });
    

    这应该允许插件按预期运行。当然,最后一步是添加验证规则。我希望有所帮助。如果仍然遇到事件问题,请尝试使用JQuery的Event对象方法在控制台上进行调试。