我有一个带有隐藏提交按钮和一个文本输入的表单。 在文本输入中,jQuery i附加了一个提交表单的更改事件。 问题是如果我在输入上按Enter键,那么表单会提交两次。 我认为是因为输入提交表单并且输入检测到更改事件并再次提交表单。 我有两个问题: - 我的想法是对的吗? - 我该如何解决这个问题?
这是javascript:
$("input.price").live('change', function () {
$(this).closest('form').submit();
});
编辑:我认为e.preventDefault()阻止事件“更改”的默认但不阻止事件“提交”..我在事件“改变”之前尝试这个没有运气但可能我关闭解决方案:
$("input.price").live('submit', function (e) {
e.preventDefault();
});
答案 0 :(得分:1)
$("input.price").live('change', function (eventObject) {
eventObject.preventDefault();
$(this).closest('form').find('input.submitButton').click();
});
答案 1 :(得分:1)
您需要使用preventDefault()
功能来阻止表单提交。
E.g。
$("input.price").live('change', function (e) {
e.preventDefault();
$(this).closest('form').find('input.submitButton').click();
});
答案 2 :(得分:1)
我在这里缺少什么,为什么不这样做呢:
$("input.price").live('change', function (eventObject) {
$(this).closest('form').submit();
});
答案 3 :(得分:0)
最后我提出了一个解决方案! 事情是......正如Mike C.所说,额外的代码可以帮助解决问题。 问题是我正在尝试提交它的形式是MVC的Ajax.BeginForm所以..主要问题是该表单的ajax提交,这是第二次提交!
我无法改变这种行为..只是用Html.Beginform改变Ajax.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();
}
});