2011-09-20 134 views
2

我有以下代码,我用它来提交链接(而不是按钮)的表单。这是为了让我们可以做一些CSS悬停的东西。Jquery - Internet Explorer提交表单两次

$('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,但我这样做。

任何帮助表示赞赏。

+2

也许用户点击提交两次真的很快。尝试在第一次点击后禁用链接。 –

+0

如果使用event.preventDefault()作为submit_form的第一行,它会执行相同的操作吗? (而不是返回false;) –

+0

+1 @ilia往往是这样。普通人群用于双击Windows图标,因此他们倾向于双击_everything_。我几年前编写了一个在线支付系统,为了防止双重提交,我们禁用了onclick提交按钮(除了服务器端验证)。 –

回答

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; 
    } 
} 
1

当你submit自己需要的形式也取消事件的默认处理。

jQuery的方法是event.preventDefault()

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

返回true/false拥有jQuery中没有任何影响。