2014-11-04 190 views
8

我有一个提交按钮。点击一个()函数的形式:jQuery的点击()在提交按钮

$("#submitId").click(function() { 
    $('#hiddenInput').val(someVariable); 
}); 

它的工作原理就像一个魅力。点击提交按钮后,click()函数将填充隐藏的输入变量,然后提交整个表单。服务器接收到刷新内容的隐藏输入。

我的问题是:它会一直工作吗?是否有任何危险,由于某种原因我还不知道,提交操作首先执行,稍后再执行click()函数?我想确保隐藏的输入总是被刷新。

+0

$(“form”)。submit();将绕过这一点,用户可以从他们的控制台或网址执行呼叫。 – 2014-11-04 23:26:19

+0

我想在按ENTER键提交表单时它也可能被绕过?试一试。 – 2014-11-04 23:28:52

+2

@JamesBlond - 回车仍然会导致点击处理程序执行。 – 2014-11-04 23:29:22

回答

4

这将是最好的值更新直接连接到表单的提交处理这样

$("#submitId").closest("form").submit(function() { 
$('#hiddenInput').val(someVariable); 
}); 
+0

这就是它。提交事件可以以各种方式触发。与其试图猜测用户如何触发提交事件(单击?按键?),只需将您的处理程序直接附加到表单的提交。 – 2014-11-04 23:35:53

+0

如果提交按钮嵌入到表单中的某个元素中,这将不起作用。我会使用'.closest('form')'而不是'.parent('form')'。 – PeterKA 2014-11-04 23:41:27

+0

@PeterKA - 是的,这是一个很好的观点。将“父”编辑为“最接近”。 – 2014-11-04 23:53:43

0

的。点击()应该总是首先运行。

+0

更多评论而非答案。至少提供一些来源支持。 – 2017-12-22 15:55:53

19

当使用表单,它总是建议让submit按钮做的工作:触发表单提交事件 ...这就是它的意思了。然后,您将听到上的submit事件,而不是submit按钮上的click事件。

您可以使用event.preventDefault()来防止默认提交表格,以便您可以做一些管家然后您可以提交表格。

$("#submitId").closest('form').on('submit', function(event) { 
    event.preventDefault(); 
    $('#hiddenInput').val(someVariable); //perform some operations 
    this.submit(); //now submit the form 
}); 

或者干脆,

$('form').on('submit', function(event) { 
    event.preventDefault(); 
    $('#hiddenInput').val(someVariable); //perform some operations 
    this.submit(); //now submit the form 
}); 
+0

如果您的提交按钮使用“formaction”,这不起作用。 我建议使用'click'事件触发提交按钮,或者将'formaction'的值赋给表单的'action'属性,然后触发'submit'事件。 – KevinAdu 2017-09-04 09:40:12

+0

@kevinAdu你是什么意思?你有演示来说明你的担忧吗?谢谢。 – PeterKA 2017-09-04 13:58:27

2

我个人认为是比较安全的,以防止提交,需要输入然后设置值,然后才提交表单编程。如:

$("form").submit(function (e) { 
    e.preventDefault(); 
    $('#hiddenInput').val(someVariable); 
    $(this).submit(); 
});