OnSubmit return false не работает

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

Все формы имеют "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

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

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

Спасибо!

Ответ 1

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

Ответ 2

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

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

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

Ответ 3

Кажется, что функция submit() исключает событие onsubmit 'form' в 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>

Ответ 4

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

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

            if (!isValid) {
                e.preventDefault();
            }
        });
    });

Ответ 5

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

<a href="#" onClick="return document.getElementById('form1').onsubmit();">button</a> 

Ответ 6

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

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

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

Ответ 7

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

Ответ 8

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

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

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

и следующий код: WORKING,

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

Я просто следую образцу здесь

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

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

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

Ответ 9

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

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