Javascript 如何避免单输入表单重复提交?

Javascript 如何避免单输入表单重复提交?,javascript,jquery,html,ruby-on-rails,forms,Javascript,Jquery,Html,Ruby On Rails,Forms,我有一个单一的输入表单: <form id="my_form"> <input id="my_input" type="text" /> </form> 这适用于我更改输入值并调出焦点的情况,但如果我更改输入值并点击“回车”,则表单将提交两次(一次用于“回车”,一次用于更改) 我开始走低层监听键和管理提交状态的道路,但我想我会把它扔给社区,看看是否有人知道一种更干净的方法。您也可以将提交事件附加到表单,而不是干扰容易出错的检查。如果该值等于旧值,请不要使

我有一个单一的输入表单:

<form id="my_form">
  <input id="my_input" type="text" />
</form>
这适用于我更改输入值并调出焦点的情况,但如果我更改输入值并点击“回车”,则表单将提交两次(一次用于“回车”,一次用于
更改


我开始走低层监听键和管理提交状态的道路,但我想我会把它扔给社区,看看是否有人知道一种更干净的方法。

您也可以将提交事件附加到表单,而不是干扰容易出错的检查。如果该值等于旧值,请不要使用
ev.preventDefault()
提交表单


你试过模糊事件吗


这将在输入失去焦点时触发。

只是对Rob W解决方案的改进

$('#my_form').submit((function () {
   //Enclose variables as to not pollute the global namespace
   var oldValue,
       input = $('#my_input');  //cache your input

   //Same concept as Rob W's solution
   return function (e) {
       var newValue = input.val();

       if(newValue === oldValue) {
          e.preventDefault();
       }

       oldValue = newValue;
   };
})());

非常干净的解决方案,我建议用一些旗子控制,但你的要好得多
var oldvalue = "";
$("#my_form").submit(function(ev){
    var newvalue = $("#my_input", this).val();
    if(newvalue == oldvalue) ev.preventDefault(); //Same value, cancel submission
    else oldvalue = newvalue;
})
$('#my_form').submit((function () {
   //Enclose variables as to not pollute the global namespace
   var oldValue,
       input = $('#my_input');  //cache your input

   //Same concept as Rob W's solution
   return function (e) {
       var newValue = input.val();

       if(newValue === oldValue) {
          e.preventDefault();
       }

       oldValue = newValue;
   };
})());