2016-11-18 3 views
2

У меня есть код, в котором я пытаюсь предотвратить отправку формы несколько раз. Я нашел этот код в другом потоке Stack, но он не работает. Вместо этого он представляет форму бесконечного времени и отстает от всего сервера!Предотвращение отправки формы несколько раз

$(document).ready(function() { 
    $('form').submit(function() { 
     console.log("hi") 
     if ($(this).valid()) { 
      $(this).submit(function(){ 
       return false; 
      }); 
      return true; //Tried with an without 
     } 
    }); 
}); 

Вот картина выхода в консоли:

enter image description here

Это Предохранять отправки формы. Я просто сделал снимок с этим номером.

Нить, на которой я нашел код, приведенный выше, является принятым ответом на this question, и у него много оборотов.

Обратите внимание, что у меня есть несколько форм на странице и много страниц со многими формами! Решение одной конкретной формы недостаточно. Мне нужно глобальное решение. Также я использую Codeigniter.

+0

Ну, это вызовет бесконечный цикл, (1), потому что вы проверяете подачу формы события (2) и внутри вашего представления формы, вернитесь к (1). Попытайтесь избавиться от обратного вызова 'submit()' и прикрепите код к простой кнопке. – Keith

ответ

-1

Вам необходимо отменить отправку первоначальной формы, чтобы вы сделали это только после того, как подтвердили ее. Но, честно говоря, HTML5 не отправит, если форма недействительна, поэтому ваш код кажется излишним.

Вот рабочий пример, который выводит большую часть JQuery из микса. Он только представляет форму один раз.

Вы также можете проверить его здесь: https://jsfiddle.net/5oyp6aa0/6/

$(function() { 
    var theForm = document.querySelector("form"); 
    theForm.addEventListener("submit",function(evt) { 
     // First, cancel the form's submission: 
     evt.preventDefault(); 
     evt.stopPropagation(); 
     console.log("Navitve Submit Cancelled") 
     if (theForm.checkValidity()) { 
      // Then, only if it's valid, submit 
      console.log("Manual Submit Triggered"); 
      theForm.submit(); 
     } 
    }); 

}); 
+0

'evt.preventDefault не является функцией.' Evt находится в неправильной функции haha. я буду проверять его снова. – Nic

+1

@RoryMcCrossan Спасибо. Еще не проснулся! –

+0

Он по-прежнему отправляет несколько раз. Отдает более тысячи раз всего за 5 секунд. – Nic

-1

Попробуйте переходящая в случае и с помощью e.preventDefault()

$(document).ready(function() { 
    $('form').submit(function(e) { 
     e.preventDefault(); 
     console.log("hi") 
     if ($(this).valid()) { 
      $(this).submit(function(){ 
       return false; 
      }); 
     } 
    }); 
}); 
+0

Он по-прежнему отправляет несколько раз. – Nic

-1

Поправьте меня, если я ошибаюсь, но, не должны вы просто return;, если это действительно, иначе прекратите подачу, как в документации jQuery example.

$(document).ready(function() { 
    $('form').submit(function(event) { 
     console.log("hi") 
     if ($(this).valid()) { 
      return; 
     } 
     event.preventDefault(); 
    }); 
}); 
+0

Не работает. Все еще горит бесконечно. – Nic

0

После того, как ни один из этих ответов не работал, я решил сделать еще один выстрел. Это работает для меня.

$(document).ready(function() { 
    $("form").submit(function (e) { 
     var attr = $(this).attr('submitted'); 
     if (typeof attr === typeof undefined || attr === false) { 
      if ($(this).valid()) { 
       $(this).attr('submitted', 'submitted'); 
       $(this).submit(); 
      } else { 
       e.preventDefault(); 
      } 
     } else { 
      e.preventDefault(); 
     } 
    }); 
}); 
+1

Вы можете избавиться, если оба ветви else. Тебе не нужно нигде отбирать все. Вы можете отметить свой ответ как принятый, если это факт. – alariva

Смежные вопросы