2013-03-12 46 views
1

我有一个隐藏提交按钮和一个文本输入的表单。 在文本输入中,使用jQuery附加了一个提交表单的更改事件。 事情是,如果我输入输入,然后表单提交两次。 我认为是因为输入提交表单和输入检测到一个更改事件,它再次提交表单。 我有两个问题: - 我的想法是对的吗? - 我该如何解决这个问题?防止提交表单两次更改事件

这是JavaScript:

$("input.price").live('change', function() { 
    $(this).closest('form').submit(); 
}); 

编辑:我认为e.preventDefault()阻止事件“改变”的默认,但没有防止事件“提交” ..我试试这个之前出现的“变化”,没有运气,但也许我接近的解决方案:

$("input.price").live('submit', function (e) { 
     e.preventDefault(); 
}); 

回答

0

最后我想出了一个解决方案! 事情就是这样..正如Mike C.所说,额外的代码可以帮助解决问题。 问题是,我试图提交它的MVC的Ajax.BeginForm的形式,所以..主要问题是该表单的ajax提交,这是第二次提交!

我无法改变这种行为..只改变Ajax.Beginform与Html.Beginform ..我不想做的事情。 所以..我想出了这个“生锈”的解决方案:

$("input.price").live('keypress', function (e) { 
    if (e.keyCode == 13) { 
     $(this).attr('data-submitting', true); 
    } 
}); 

$("input.price").live('change', function (e) { 
    if (!$(this).attr('data-submitting')) { 
     $(this).closest('form').submit(); 
    } 
}); 
1
$("input.price").live('change', function (eventObject) { 
    eventObject.preventDefault(); 
    $(this).closest('form').find('input.submitButton').click(); 
}); 
1

您需要使用preventDefault()功能,防止形式从提交。

E.g.

$("input.price").live('change', function (e) { 
    e.preventDefault(); 
    $(this).closest('form').find('input.submitButton').click(); 
}); 
+0

这并不工作..形式不断提交两次:/ – 2013-03-12 20:56:16

1

我在这里缺少什么,你为什么不这样做,而不是:

$("input.price").live('change', function (eventObject) { 
    $(this).closest('form').submit(); 
}); 
+0

谢谢,我只是改变它。 (但问题仍然存在) – 2013-03-12 20:59:42

+0

如果您使用我展示的方法提交表单,您是否可以删除隐藏的提交按钮? – 2013-03-12 21:02:20

+0

是的迈克,我删除了按钮。但双提交持续 – 2013-03-13 15:16:25