2011-06-20 176 views
2

我不能让.submit()函数的jQuery的工作我归结一切都在我的代码:如何在JQuery Ajax验证之后提交表单?

<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验证后手动提交表单的首选方式吗?

感谢

+1

您的假设是正确的,只是您在“提交”输入类型而不是“按钮”输入类型上运行处理程序。所以,如果你改变“提交”作为一个按钮,它应该工作。 – rajasaur

+0

由于您使用'ajax验证'而感到困惑。您是使用远程异步验证还是尝试验证表单并异步提交? –

+0

谢谢@rajasaur你是对的。 .click对输入类型没有很好的绑定。虽然理论上.hide();也不应该工作。 – bonez

回答

2

首先,有一对夫妇的事情,我想你应该知道的:

  1. 任何时候你想要把一个事件绑定到DOM元素上,你应该确保页面已经完全加载。如果有疑问,请将代码包装在

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

  2. 此外, .trigger(“提交”)方法不起作用,如果输入[类型=“提交”]的名称属性元素被设置为值“提交”。由于 .submit()不带参数调用是 .trigger('submit')的快捷方式,因此,如果您随时调用JQuery的 .submit()方法,则需要确保并指定输入的名称属于非“提交”的东西。

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

如果您还需要防止对默认的浏览器操作提交事件,你可以使用jQuery的交替触发方法:

 
$('#mainform').triggerHandler('submit'); 
。 虽然验证器方法本身应该可能是您在没有错误的情况下调用 form.submit()的地方。它也应该是你处理表单提交的地方,因为它是守门人,可以这么说。总而言之,如果你要使用Validator插件,你应该遵循它自己的约定。确保表单也默认加入 名=提交“提交”到您的提交按钮,然后删除所有你拥有jQuery代码,并使用从验证文档这个例子更换:

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

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

+0

谢谢你的详细回复 – bonez

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

但是如果你有ajax验证 – svlada

相关问题