我想在用户提交表单后执行javascript验证。文档jQuery .submit()
清楚地说:提交时触发事件
当用户试图提交表单时,提交事件发送到元素。
但如果我把
$('form.simple_form.new-channel').submit perform_validation()
到我的代码,perform_validation()
每触发呈现页面时!即使没有形式,也没有“提交”按钮。提交表单后调用函数的正确方法是什么?
我想在用户提交表单后执行javascript验证。文档jQuery .submit()
清楚地说:提交时触发事件
当用户试图提交表单时,提交事件发送到元素。
但如果我把
$('form.simple_form.new-channel').submit perform_validation()
到我的代码,perform_validation()
每触发呈现页面时!即使没有形式,也没有“提交”按钮。提交表单后调用函数的正确方法是什么?
我相信你不想在提交后触发动作,你只是想在用户点击提交按钮后运行它。
这样工作会不会这样?
$('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);
这一个告诉脚本形式运行提交,这名作为参数传递的功能。
问题是你的语法。
$('form.simple_form.new-channel').submit perform_validation()
,因为JavaScript的慷慨的事实,你不调用提交这里,你有perform_validation后无semicolin ......不会引起任何错误,但只是调用执行验证,如果它是对所有通过其自身的线用半乳糖。
纠正这一点,做到这一点
$('form.simple_form.new-channel').submit(perform_validation);
你刚刚犯了同样的错误;过早的调用。 阅读此:http://tobyho.com/2011/10/26/js-premature-invocation/ – entio 2014-08-27 10:35:52
@entio是正确的。这两行都是等价的,但是第一个'$''form.simple_form.new-channel'。submit perform_validation()'只是CoffeScript代码,在'submit'方法中不需要括号 – pomeh 2014-08-27 10:42:58
@DaleCorns你可以投票他们只有在他们不回答OP问题的时候,这确实是你的回答没有做的。你可以编辑和修正你的答案,然后我可以删除我的downvote,但是因为已经有一个公认的答案,根本没有意义。 – pomeh 2014-08-27 11:15:21
这样的区别是什么之间你的答案和YM问题的代码? – Leo 2014-08-27 10:12:47
你如何理解这方面的差异? $('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
@Leo看看这个看到的区别:http://stackoverflow.com/a/25179299/827168 – pomeh 2014-08-27 10:17:35