3

我有以下代码用于提交带有链接(而不是按钮)的表单。这样我们就可以用它们做一些 CSS 悬停的东西。

$('a.css_submit').click(submit_form);
$('a.inactive_submit').click(submit_form);

function submit_form(event) {
  if ($(this).parents('form:first').length > 0 && !$(this).hasClass('inactive_submit'))   {
        $(this).toggleClass("css_submit inactive_submit");
    $(this).parents('form:first').submit();
    return false;
  } else {
    return true;
  }
}

问题是 Internet Explorer 偶尔会提交两次表单。我自己无法复制问题,但我可以在我的生产服务器日志中验证它。此问题在 IE6 - IE9 中仍然存在。所有其他浏览器都可以正常工作。我看过一些帖子说从链接返回 false,但我正在这样做。

任何帮助表示赞赏。

4

4 回答 4

2

当您submit自己创建表单时,您还需要取消事件的默认处理。

jquery方式是event.preventDefault()

$(this).parents('form:first').submit();
event.preventDefault();

返回true/false在 jquery 中无效。

于 2014-09-24T15:42:19.370 回答
0

您可以添加一些额外的验证以确保它不会被点击两次:

var formSubmitted = false;

function submit_form(event) {
  if(formSubmitted  == true) { alert('Form already submitted.'); return false; } // determine if form is already submitted
  if ($(this).parents('form:first').length > 0 && !$(this).hasClass('inactive_submit'))   {
        $(this).toggleClass("css_submit inactive_submit");
    $(this).parents('form:first').submit();
    return false;
  } else {
    formSubmitted  = true;
    $('a.css_submit').attr('disabled', true); // disable form submit button
    $('a.css_submit').val('Processing...'); // set form submit button text to say processing
    return true;
  }
}
于 2011-09-20T15:13:27.843 回答
0

对于 IE,您可以使用以下代码:

event.returnValue = false;

我们可以检查 preventDefault 是否存在以避免错误:

event.preventDefault ? event.preventDefault() : (event.returnValue = false);
于 2019-01-16T14:10:03.703 回答
0

对于 IE,我发现了这个:

event.returnValue = false;

首先检查 event.preventDefault 是否存在以防止最终错误:

event.preventDefault ? event.preventDefault() : (event.returnValue = false);
于 2019-01-16T14:13:56.210 回答