Как отправить форму после события.preventDefault();?

#javascript

#javascript

Вопрос:

Я использовал javascript, чтобы добавить это при загрузке определенной страницы.

 document.getElementById('commit').addEventListener("click", validateSubmit,
                      false);
  

у этого метода validateSubmit есть некоторый код, который будет проверять данные формы, и
он сделает это

       function validateSubmit(){
           //some code
           window.addEventListener('submit', newsubmit, true);
           HTMLFormElement.prototype._submit = HTMLFormElement.prototype.submit;
           HTMLFormElement.prototype.submit = newsubmit;
       }

       function newsubmit(event) {
           var target = event ? event.target : this;
           event.preventDefault();
           return false;

        }
  

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

       "Uncaught TypeError: Cannot call method 'preventDefault' of undefined"
  

Пожалуйста, помогите мне…
Заранее спасибо..

Ответ №1:

Попробуйте изменить объявление вашей функции с

 function newsubmit(event) {
  

Для

 var newsubmit = function(event) {
  

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

Ответ №2:

Я не думаю, что вам нужно проходить через такие трудности, чтобы пользователь не отправлял неполную форму. Попробуйте это:

 <form name="form1" id="form1" onsubmit="return validateForm()" ....>
   <input type="text" id="txtName" />
</form>

function validateForm()
{
    //CHECK IF FORM FIELDS CONTAIN VALID VALUES?
    var formValid=....;//validation logic

    return formValid;
}
  

Теперь, если во время проверки вы обнаружите какую-либо ошибку, вы установите formValid переменную в false противном случае, если все входные данные верны, установите formValid значение true. When form will get false as return value from validateForm`, функция validateForm не будет отправлена.

Комментарии:

1. Спасибо, что ответили так быстро, но моя проблема в том, что я не добавил этот код в саму HTML-страницу. Я создал расширение для Google Chrome, которое сначала проверяет наличие определенного URL-адреса, и если этот URL-адрес найден, то при попытке пользователя нажать кнопку отправки появляется приведенный ниже код, а затем он вызовет функцию validatesubmit и для того, чтобы не отправлять уже заполненные значения «document.getElementById(‘commit’).addEventListener(«click», validateSubmit,false);» Я не могу изменить код HTML-страницы. Поскольку это не мой сайт:(

Ответ №3:

Попробуйте это:

 function validateSubmit(){

           window.addEventListener('submit', newsubmit, true);
           HTMLFormElement.prototype.submit = newsubmit;
           HTMLFormElement.prototype._submit = HTMLFormElement.prototype.submit;

       }

       function newsubmit(event) {
           var target = event ? event.target : this;
           event.preventDefault();
           return false;

        }