Javascript 提交按钮(保证)总是首先调用JS处理程序吗?
快速提问,如果我有一个提交表单的提交字段Javascript 提交按钮(保证)总是首先调用JS处理程序吗?,javascript,jquery,html,Javascript,Jquery,Html,快速提问,如果我有一个提交表单的提交字段 <input type="submit" id="btnSubmit" value="Submit" /> 我是否保证JS处理程序将首先发生,然后再提交任何服务器端表单 我认为保证这一点的唯一方法是在JS处理程序中preventDefault。但是如果我们不这样做,我们无法确定是JS点击处理程序还是服务器端操作将首先发生 e.preventDefault(); 我能保证吗?因此,无需e.preventDefault? 不要建议使用任何“常
<input type="submit" id="btnSubmit" value="Submit" />
我是否保证JS处理程序将首先发生,然后再提交任何服务器端表单
我认为保证这一点的唯一方法是在JS处理程序中preventDefault
。但是如果我们不这样做,我们无法确定是JS点击处理程序还是服务器端操作将首先发生
e.preventDefault();
我能保证吗?因此,无需e.preventDefault?
不要建议使用任何“常规按钮”,我必须使用Submit字段,这是一个Struts2应用程序,其中的Submit字段必须保留在表单上。没关系,只需创建按钮类型的按钮,使用juery click handler处理,做你必须做的事情,然后提交表单即可
$("btnSubmit").click(function () {
//do what you have to do before submit
$('form[name=createcustomer]').submit();
});
JavaScript单击事件处理程序可能会在提交表单之前触发。尽管如此,这并不能保证。这是一个比赛条件。您应该做的是决定操作的顺序,并适当地编写代码: 如果希望在提交表单之前触发客户端JS代码,请使用event.preventDefault();(注意:您必须将事件参数传递给单击处理程序。您在发布的代码中没有这样做) 接下来运行客户端代码。最后,使用JS提交表单:
// pass the event param to the handler function
$('#btnSubmit').click(function(e) {
//prevent immediate form submission
e.preventDefault();
// do whatever you want to happen BEFORE the form is submitted
alert('clicked');
// to do Ajax form submission:
var form = $('#btnSubmit').closest.('form');
var data = form.serialize();
var URL = form.attr('action');
$.ajax({
url: URL
data: data;
method: 'POST'
});
// OR... to do non-Ajax form submission:
var form = $('#btnSubmit').closest.('form');
form.submit();
});
相反,如果希望在表单提交后执行客户端代码,请使用Ajax并执行回调:
$('#btnSubmit').click(function() {
var form = $('#btnSubmit').closest.('form');
var data = form.serialize();
var URL = form.attr('action');
$.ajax({
url: URL
data: data;
method: 'POST'
}).then(function () {
alert('clicked')
});
});
我认为您混淆了两个事件
单击
和提交
。第一种情况发生在您单击按钮时,即使用鼠标。但是
也接受键盘事件。允许提交表单而无需单击。这样,您应该处理submit
事件以确保表单已提交
submit
事件是由于单击而生成的,但如果不阻止,则可能不会由于上述原因发生
您可以在submit
事件本身上使用preventDefault()
停止提交表单。如果将其放置在单击
上,但如果未发生单击
事件,则仍会提交表单
单击按钮时javascript事件的顺序-单击
->提交
。您可以通过preventDefault()
或returnfalse
停止任何事件,但在关闭javascript时,它不会阻止表单提交
因此,您的问题的答案是javascript事件首先发生,然后执行操作。否,它必须是每个应用程序要求的提交字段,因此我的问题我的问题很糟糕,没有看到这一部分。缺点是,这无法回答问题。我没有Ajax方法,我有一个提交字段自动转到服务器端方法(例如Struts方法)。是先提交还是先JS OnClick?这就是问题所在。好的,谢谢。你确定这是“比赛条件”吗?这是我的想法,但我的同事不同意,他说JS OnClick总是先发生。我发现:-根据这篇文章,JS处理程序总是首先出现。你的朋友可能是对的,但不管怎样,为什么不直接按照你想要的顺序编码它呢?我必须使用提交字段,这是一个Struts2应用程序,表单上必须保留提交字段。-没有意义,为什么没有意义?在Struts表单上,您有一个带有提交按钮的表单,该按钮将表单提交给服务器。这是一个“直接”表单提交,而Ajax调用只执行部分表单或JSON。传统的Struts应用程序使用提交来转到动作或控制器。碰巧我需要在提交中添加一个额外的JS OnClick,我想知道哪一个肯定会首先发生。它是一个简单的HTML。你想用js做什么?
$('#btnSubmit').click(function() {
var form = $('#btnSubmit').closest.('form');
var data = form.serialize();
var URL = form.attr('action');
$.ajax({
url: URL
data: data;
method: 'POST'
}).then(function () {
alert('clicked')
});
});