1

我有一个带有隐藏提交按钮和一个文本输入的表单。在文本输入中,使用 jQuery 我附加了一个提交表单的更改事件。问题是,如果我在输入中按 Enter,则表单会提交两次。我认为是因为输入提交表单并且输入检测到更改事件并再次提交表单。我有两个问题: - 我的想法对吗?- 我怎样才能解决这个问题?

这是javascript:

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

编辑:我认为 e.preventDefault() 阻止了事件“更改”的默认设置,但没有阻止事件“提交”..我在事件“更改”之前尝试这个没有运气但也许我接近解决方案:

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

4 回答 4

1
$("input.price").live('change', function (eventObject) {
     eventObject.preventDefault();
     $(this).closest('form').find('input.submitButton').click();
 });
于 2013-03-12T20:47:43.167 回答
1

您需要使用该preventDefault()功能来阻止表单提交。

例如

$("input.price").live('change', function (e) {
  e.preventDefault();
  $(this).closest('form').find('input.submitButton').click();
});
于 2013-03-12T20:48:30.543 回答
1

我在这里错过了什么,你为什么不这样做:

$("input.price").live('change', function (eventObject) {
     $(this).closest('form').submit();
 });
于 2013-03-12T20:50:46.273 回答
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();
     }
});
于 2013-03-13T22:05:45.443 回答