Ответ 1
Браузеры не вызывают событие onSubmit в форме, если вы вызываете submit() программно.
Я полностью смущен... Я бы поклялся, что это работало вчера... Я проснулся сегодня утром, и все мои формы перестали работать в моем проекте.
Все формы имеют "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
Почему, если я нажимаю кнопку, форма отправляется?
Я знаю, что это общий вопрос новичков, но я застрял
Спасибо!
Браузеры не вызывают событие onSubmit в форме, если вы вызываете submit() программно.
Событие onsubmit только запускается для представления нормальной формы. Он не срабатывает при вызове метода JavaScript submit()
.
Лучшим решением является использование обычной кнопки отправки здесь.
Если вы хотите продолжить использовать ссылку в верхней части страницы (которая не является unobtrusive, progressive или изящно), вам нужно явно вызвать функцию sub()
и проверить ее возвращаемое значение, прежде чем принимать решение о том, следует ли вызывать submit()
или нет.
Кажется, что функция 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>
Вы можете использовать метод jquery preventDefault.
$(function () {
$('#repForm').bind('submit', function (e) {
var isValid = true;
if (btnname == 'test') {
isValid = ValidateEmailID();
}
else {
isValid = ValidateSomething();
}
if (!isValid) {
e.preventDefault();
}
});
});
Попробуйте изменить код "button" таким образом
<a href="#" onClick="return document.getElementById('form1').onsubmit();">button</a>
Я подозреваю, что он хотел использовать кнопку формы, которая не принадлежала типу отправки. В этом случае вы также можете использовать:
<input type="button" value="Submit" onclick="if( sub()) document.getElementById('form1').submit()">
Еще один совет, который я даю, - использовать атрибут name
во всех формах, поскольку его гораздо проще использовать:
document.form1.submit()
вместо document.getElementById('form1').submit()
. Это кроссбраузер и работает во всех них. getElementById отлично, но не нужно для форм.
Добавьте "return" во все свои операторы onsubmit в свой тег формы... например. onsubmit = "return validate_function()" таким образом, возвращаемое значение false или return true в вашей функции проверки отправляется в качестве результата команде return в вашем onsubmit.
У меня такая же проблема (я использовал 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.
Проверьте базовые синтаксисы и структуры... затем проверьте свои другие формы на своей странице или в поле ввода без формы... У меня была такая же проблема (или аналогичная: нажатие ввода в поле ввода приведет к отправке формы)...
Скопируйте приведенные выше образцы и загрузите страницу. Они работали, а у меня не было, поэтому я настраивал форматирование и даже переписывал его.