【问题标题】:Data Submitting Twice On Pressing Enter Key按 Enter 键两次提交数据
【发布时间】:2016-05-06 18:32:59
【问题描述】:

我正在处理待办事项。而且,我正在寻找通过ajaxpressing 'enter' key 上提交待办事项。

它工作正常。但是,有一个问题。每次按下“输入”键,它都会提交 2 次数据。我没有任何提交按钮。我想在文本框中按回车键 (#todos-t_description)。

<form id="create-todos-form" action="/misc/todos/index" method="post">

  <input id="todos-t_description" class="t_description form-control" name="Todos[t_description]" type="text">

  <select id="todos-t_case_id" class="form-control" name="Todos[t_case_id]">
      <option value="">Related to case</option>
  </select>

</form>

我用过。

<script>
window.addEventListener("DOMContentLoaded", function() {
  jQuery(document).ready(function($){

    $('.t_description').keydown(function (event){
      if (event.keyCode == 13) {
        $('#create-todos-form').submit();
      }
    });

    $('#create-todos-form').on('submit', function(e) {
      e.preventDefault();
      var form = $(this);
      var formData = form.serialize();
      $.ajax({
        url: "/misc/todos/create",
        type: "POST",
        data: formData,
        success: function (data) {
          $("#todos-t_completed_date").blur(); 
          $('tbody').append(data);
          $('.t_description').val("");
          $('#todos-t_completed_date').val("");
          $('.noTodos').hide();
        },
        error: function () {
          alert("Problem Ocurred");
        }
      });
    });
  });
}, false);
</script>

我不知道代码中发生了什么。如果我在e.preventDefault(); 之前发出警报。在单次“输入”键按下时也会出现两次警报消息。即使我在收到成功消息后也专注于其他文本框。但是,不,它没有奏效。任何提示/建议。

【问题讨论】:

  • 使用eventListenerdocumentReady

标签: jquery ajax


【解决方案1】:

原因

默认情况下,HTML 将在用户输入时提交表单。因此,在您的 keydown 事件中,它只提交一次,但由于您没有阻止默认设置,它会再次提交。

如何解决:

  1. 您可以删除 keydown 事件。
  2. 如果您想保留它,请在 if 案例中添加 event.preventDefault();return false;

对于场景 #2,代码为:

$('.t_description').keydown(function (event){
    if (event.keyCode == 13) {
        $('#create-todos-form').submit();
        event.preventDefault(); // To prevent the default HTML form submission
    }
});

正如您在此问题中看到的Prevent users from submitting a form by hitting Enter,表单正在提交,没有任何事件。

【讨论】:

  • 其实在那个页面。双击待办事项后,编辑待办事项也在那里。可编辑的文本即将到来。在哪里,我可以编辑它并再次提交。所以,我被卡住了。
  • 对不起@NanaPartykar,我不明白你的意思。你能改写一下吗?
【解决方案2】:

您不再需要绑定keyupkeydown,因为按Enter 应该已经提交了您的表单。

这是给你的Fiddle

HTML

<form id="create-todos-form" action="/misc/todos/index" method="post">
  <input id="todos-t_description" class="t_description form-control" name="Todos[t_description]" type="text">
  <select id="todos-t_case_id" class="form-control" name="Todos[t_case_id]">
    <option value="">Related to case</option>
  </select>
</form>

jQuery

$(document).ready(function() {
  $("#create-todos-form").on("submit", function(e) {
    e.preventDefault();
    alert("I was submitted!");
  })
});

【讨论】:

  • 但是,它没有提交。因为,我必须在 something 上初始化它。正确的 ?所以,我在按键时对其进行了初始化。如果我不初始化它。它从不提交。
  • @NanaPartykar 只需删除 $('.t_description').keydown(function (event){ if (event.keyCode == 13) { $('#create-todos-form').submit(); } }); 就可以了。
  • 嗨帕特里克,我已经试过了。但不是。它不工作。我现在自己试过了。但不是。结果相同。我通过不同的方式进行了尝试。但是,当我从每个案例中得到相同的结果时。我想问一下。你的回答非常正确。我知道。但是,为什么在我的情况下,它不起作用。
  • @NanaPartykar 为什么你的action 来自formurl 来自AJAX 不一样?你不应该只提交一页吗?
  • @NanaPartykar 再次检查我的答案,我添加了一个小提琴供您查看和测试。
【解决方案3】:

尽量不要将 keydown 事件绑定到输入字段。在输入字段中按 enter 似乎会自动触发表单上的提交操作。自己绑定是副本的来源。

【讨论】:

  • 但是,对于文本框,我必须使用 keydownkeypress 之类的任何函数。没有这个。这怎么可能。
  • @NanaPartykar 这是输入。它在表格里面。 submit() 函数知道输入是否是提交,我猜。
  • 是的,浏览器在文本字段中捕获回车键并自动触发提交事件。您无需手动执行此操作。 :)
猜你喜欢
  • 2014-04-04
  • 2011-11-05
  • 2010-10-28
  • 2016-04-23
  • 1970-01-01
  • 2011-03-13
  • 1970-01-01
  • 1970-01-01
  • 2017-03-17
相关资源
最近更新 更多