Javascript 如何在form.submit处理程序(jquery)内的异步回调中触发表单提交
我正在处理这样的表格提交:Javascript 如何在form.submit处理程序(jquery)内的异步回调中触发表单提交,javascript,jquery,form-submit,Javascript,Jquery,Form Submit,我正在处理这样的表格提交: $('#some-form').submit(function(ev) { var $form = $(this); $.getJSON('/some/endpoint', function(data) { if (data.somecondition) { $form.submit(); // <- not doing what I want } }); return
$('#some-form').submit(function(ev) {
var $form = $(this);
$.getJSON('/some/endpoint', function(data) {
if (data.somecondition) {
$form.submit(); // <- not doing what I want
}
});
return false;
});
$(“#某种形式”).submit(函数(ev){
var$form=$(此);
$.getJSON('/some/endpoint',函数(数据){
if(data.somecondition){
$form.submit();//不要在步骤1中提交表单,使用常规按钮,并让onclick调用您的函数,这样您就不必担心提交事件管理
您可以通过这种方式在回调中直接调用submit,而不必担心进入循环。不要在步骤1中提交表单,使用常规按钮,让onclick调用您的函数,这样您就不必担心submit事件管理
您可以通过这种方式在回调中直接调用submit,而不用担心进入循环。事实证明,这其实非常简单,只需在元素的非扩展版本上调用submit()
:
$form.get(0).submit();
示例如下:
警告:请参阅@Avi Pinto的评论。事实证明,这其实很简单,只需在元素的非扩展版本上调用submit()
:
$form.get(0).submit();
示例如下:
警告:请参阅@Avi Pinto的评论。您可以在jQuery中处理表单提交:
$('#some-form').submit(function(ev) {
var $form = $(this);
$.getJSON('/some/endpoint', function(data) {
if (data.somecondition) {
//$form.submit(); // <- not doing what I want
//untested, but you should get the idea
$.ajax({
type: 'POST',
url: $form.attr('action'),
data: $form.serialize(),
success: function() { alert('success!') }
});
}
});
return false;
});
$(“#某种形式”).submit(函数(ev){
var$form=$(此);
$.getJSON('/some/endpoint',函数(数据){
if(data.somecondition){
//$form.submit();//您始终可以在jQuery中处理表单提交:
$('#some-form').submit(function(ev) {
var $form = $(this);
$.getJSON('/some/endpoint', function(data) {
if (data.somecondition) {
//$form.submit(); // <- not doing what I want
//untested, but you should get the idea
$.ajax({
type: 'POST',
url: $form.attr('action'),
data: $form.serialize(),
success: function() { alert('success!') }
});
}
});
return false;
});
$(“#某种形式”).submit(函数(ev){
var$form=$(此);
$.getJSON('/some/endpoint',函数(数据){
if(data.somecondition){
//$form.submit();//使用标志
$('#some-form').submit(function(ev) {
if($form.data("canSubmit")) return true;
var $form = $(this),
$form.data("canSubmit",false);
$.getJSON('/some/endpoint', function(data) {
if (data.somecondition) {
$form.data("canSubmit",true);
$form.submit(); //this time it will submit
}
});
return false;
});
使用旗帜
$('#some-form').submit(function(ev) {
if($form.data("canSubmit")) return true;
var $form = $(this),
$form.data("canSubmit",false);
$.getJSON('/some/endpoint', function(data) {
if (data.somecondition) {
$form.data("canSubmit",true);
$form.submit(); //this time it will submit
}
});
return false;
});
只是一个简单的猜测。我将更改$form.submit();
到返回true;
注意:我没有测试这个yet@Henesnarfel,它在回调函数中。return true
将从该回调中返回。原始表单提交已被处理函数中的return false
取消。你是对的。我的错误。就像我说的,这是一个快速的错误这只是一个简单的猜测。我将更改$form.submit();
到返回true;
注意:我没有测试这个yet@Henesnarfel,它在回调函数中。return true
将从该回调中返回。原始表单提交已被处理函数中的return false
取消。你是对的。我的错误。就像我说的,这是一个快速的错误essYeah,我的同事也有这个想法。虽然看起来有些迂回,但如果可以避免的话,我宁愿不更改标记(即使是通过javascript)。此外,我仍然想要“回车”键触发处理程序。不是我使用的,而是+1,因为这个解决方案确实有效。是的,我的同事也有这个想法。虽然看起来很迂回,如果可以避免的话,我宁愿不更改标记(即使通过javascript)。此外,我仍然想要“回车”键触发处理程序。不是我使用的,而是+1,因为此解决方案有效,但效果不一样。它保留在页面上,也不处理文件上载。啊,有道理,抱歉没有更大帮助。但这没有相同的效果。它保留在页面上,也不处理文件上载。啊,有道理,抱歉没有多大帮助。(不知道提交实际元素将覆盖绑定事件,尽管这是合乎逻辑的),但通过这种方式,您可以覆盖扩展的提交流,例如,使用jQuery.validate-如果您的提交事件发生在jQuery.validate之前-返回false,停止验证,然后触发表单的提交-您可能会提交无效表单。在您的情况下,这可能是正常的,但其他一些开发人员可能会将提交事件挂接到表单a我很惊讶他什么也做不到。@AviPinto,这一点很好。我更新后指出了这个警告。(不知道提交实际元素会覆盖绑定事件,尽管这是合乎逻辑的),但通过这种方式,您可以覆盖扩展的提交流,例如,使用jQuery.validate-如果您的提交事件发生在jQuery.validate之前-返回false,停止验证,然后触发表单的提交-您可能会提交无效表单。在您的情况下,这可能是正常的,但其他一些开发人员可能会将提交事件挂接到表单a我很惊讶他什么都不管用。@AviPinto,说得很好。我更新后指出了这一点。如果表单被用来进行异步调用,这可能会导致问题,因为它激活了标志,然后如果你想提交它不异步,它将不工作异步调用不会更改标志,只有提交事件会在从返回后更改标志检查它的ajax调用如果您的表单被用于进行异步调用,则可能会导致问题,因为它激活了标志,然后如果您想提交它不异步它将不工作异步调用不会更改标志,只有submit事件会在从检查它的ajax调用返回后更改标志