2014-08-27 87 views
0

我想在用户提交表单后执行javascript验证。文档jQuery .submit()清楚地说:提交时触发事件

当用户试图提交表单时,提交事件发送到元素。

但如果我把

$('form.simple_form.new-channel').submit perform_validation() 

到我的代码,perform_validation()每触发呈现页面时!即使没有形式,也没有“提交”按钮。提交表单后调用函数的正确方法是什么?

回答

2

我相信你不想在提交后触发动作,你只是想在用户点击提交按钮后运行它。

这样工作会不会这样?

$('form.simple_form.new-channel').submit(function(e){ 
    if(!perform_validation()){ 
    e.preventDefault(); //prevents form from being submitted if validation fails 
    return; //exits function 
    } 
}) 

您的perform_validation函数应返回布尔值。

编辑:

你写你的函数是这样的:

$('form.simple_form.new-channel').submit perform_validation() 

这是确切一样写:

$('form.simple_form.new-channel').submit; 
perform_validation(); 

在你的版本脚本只是运行perform_validation(),因为它不在事件处理程序中。

你也可以这样来做:

$('form.simple_form.new-channel').submit(perform_validation); 

这一个告诉脚本形式运行提交,这名作为参数传递的功能。

+0

这样的区别是什么之间你的答案和YM问题的代码? – Leo 2014-08-27 10:12:47

+0

你如何理解这方面的差异? $('form.simple_form.new-channel')。submit仅提取form.simple_form.new-channel的提交功能代​​码。 perform_validation()如你所写,它运行这个函数。 你写它的方式就像这样: $('form.simple_form.new-channel')。submit; perform_validation(); – entio 2014-08-27 10:17:08

+0

@Leo看看这个看到的区别:http://stackoverflow.com/a/25179299/827168 – pomeh 2014-08-27 10:17:35

-2

问题是你的语法。

$('form.simple_form.new-channel').submit perform_validation() 

,因为JavaScript的慷慨的事实,你不调用提交这里,你有perform_validation后无semicolin ......不会引起任何错误,但只是调用执行验证,如果它是对所有通过其自身的线用半乳糖。

纠正这一点,做到这一点

$('form.simple_form.new-channel').submit(perform_validation); 
+1

你刚刚犯了同样的错误;过早的调用。 阅读此:http://tobyho.com/2011/10/26/js-premature-invocation/ – entio 2014-08-27 10:35:52

+0

@entio是正确的。这两行都是等价的,但是第一个'$''form.simple_form.new-channel'。submit perform_validation()'只是CoffeScript代码,在'submit'方法中不需要括号 – pomeh 2014-08-27 10:42:58

+0

@DaleCorns你可以投票他们只有在他们不回答OP问题的时候,这确实是你的回答没有做的。你可以编辑和修正你的答案,然后我可以删除我的downvote,但是因为已经有一个公认的答案,根本没有意义。 – pomeh 2014-08-27 11:15:21