onSubmit возвращает false не работает - PullRequest
13 голосов
/ 30 марта 2010

Я совершенно сбит с толку ... Клянусь, это работало вчера ... Я проснулся сегодня утром, и все мои формы перестали работать в моем проекте.

Все формы имеют "onsubmit "функции, которая возвращает false, поскольку это ajax-вызов, поэтому форма никогда не отправляется.

После многих испытаний я упростил вопрос до этого фрагмента кода:

<html>
<head>
<script type="text/javascript">
 function sub()
 {
  alert ("MIC!");
  return false;
 }
</script> 
</head>
<body>

<form method = "post" id = "form1" onsubmit = "return sub()">
 input: <input type="text" name="input1" >
    <a href="#" onClick="document.getElementById('form1').submit();">button</a> 
</form>

</body>
</html>

Я бы поклялся, что это работает отлично, но сегодня не работает: D

Почему, если я нажимаю кнопку, форма отправляется?

Я знаю, что это полный вопрос новичка, но яЯ застрял

Спасибо!

Ответы [ 10 ]

12 голосов
/ 30 марта 2010

Браузеры не вызывают событие onSubmit в форме, если вы вызываете submit () программно.

7 голосов
/ 30 марта 2010

Похоже, что функция submit () пропускает событие 'form' tags 'onsubmit' в Firefox и IE8.Если вы используете кнопку отправки, то она работает как положено:

<html>
<head>
<script type="text/javascript">
 function sub()
 {
  alert ("MIC!");
  return false;
 }
</script> 
</head>
<body>

<form method = "post" action="http://google.com" id = "form1" onsubmit = "return sub();">
 input: <input type="text" name="input1" >
     <input type="submit">
</form>

</body>
</html>
5 голосов
/ 30 марта 2010

Событие onsubmit срабатывает только при обычной отправке формы. Он не срабатывает при вызове метода JavaScript submit().

Лучшее решение - использовать здесь обычную кнопку отправки.

Если вы хотите продолжить использовать ссылку в верхней части страницы (которая не является ненавязчивой , прогрессивной или грациозной), вам нужно позвонить на sub() Явно функционируйте и проверяйте его возвращаемое значение, прежде чем решить, следует ли вам вызвать submit() или нет.

4 голосов
/ 17 февраля 2012

Вы можете использовать метод jQuery protectDefault.

$(function () {
        $('#repForm').bind('submit', function (e) {
            var isValid = true;
            if (btnname == 'test') {
                isValid = ValidateEmailID();
            }
            else {
                isValid = ValidateSomething();
            }

            if (!isValid) {
                e.preventDefault();
            }
        });
    });
2 голосов
/ 30 марта 2010

Попробуй поменять код "кнопки" вот так

<a href="#" onClick="return document.getElementById('form1').onsubmit();">button</a> 
0 голосов
/ 27 октября 2018
<head>
  <script type="text/javascript">
   function sub(e)
   {
     e.preventDefault();
     alert ("MIC!");
     return false;
   }
  </script> 
 </head>
 <body>
   <form method = "post" id = "form1" onsubmit = "return sub(event);">
   </form>
0 голосов
/ 22 августа 2015

Добавьте «возврат» во все ваши операторы onsubmit в теге формы ... например. onsubmit = "return validate_function ()", поэтому возвращаемое значение false или возвращаемое значение true в вашей функции проверки публикуется как результат команды return в вашей onsubmit.

0 голосов
/ 26 сентября 2014

У меня та же проблема (я использовал IE 8),

следующий код НЕ работает:

<form method="post" id="form1" onsubmit="sub">
<form method="post" id="form1" onsubmit="sub()">
<form method="post" id="form1" onsubmit="return sub()">

и следующий код РАБОТАЕТ,

<form method="post" id="form1" onsubmit="return(sub())">

Я просто следую примеру здесь

И обратите внимание, что:

Метод submit не вызывает обработчик события onsubmit.

Отправьте форму, используя INPUT TYPE = submit, INPUT TYPE = image или BUTTON TYPE = submit object.

0 голосов
/ 05 марта 2013

Проверка основных синтаксисов и структур ... затем Проверка других форм на странице или в полях ввода без формы ... У меня была такая же проблема (или аналогичная: нажатие клавиши ввода в поле ввода приведет к отправке формы) ...

Я скопировал, вставил образцы выше и загрузил страницу. Они работали, а у меня - нет, поэтому я подправил форматирование и даже переписал его.

0 голосов
/ 23 января 2013

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

 <input type="button" value="Submit" onclick="if( sub()) document.getElementById('form1').submit()">

Другой совет, который я даю, - это использование атрибута name во всех формах, поскольку его гораздо проще использовать document.form1.submit() вместо document.getElementById('form1').submit(). Это кроссбраузер и работа во всех из них. getElementById отличный, но не обязательный для форм.

...