<input type="submit" value="Subscribe" onclick="isValidEmail()">
Выполняется isValidEmail()
, а затем выбрасывает результат. onclick
само возвращает undefined
, и отправка не предотвращается.
Вы можете сказать onclick="return isValidEmail()"
. Тем не менее:
Поместите элементы проверки / отправки в form onsubmit
, а не input click
, чтобы гарантировать, что он всегда вызывается для всех типов отправки формы.
Лучше избегать встроенных обработчиков событий.
Вы пропустили "
в атрибуте method
вашей формы, что, по-видимому, и привело к возврату по умолчанию get
.
так:
<form id="subscribe" method="post" action="test.php">
...
</form>
<script type="text/javascript>
document.getElementById('subscribe').onsubmit= function() {
if (!this.elements.email1.value.match(/^[^@]+@[^@]+$/) {
alert('Please enter an e-mail address');
return false;
}
if (this.elements.email1.value!=this.elements.email2.value) {
alert('E-mail addresses do not match');
return false;
}
return true;
}
</script>
Я заменил регулярное выражение на тривиальное, потому что выражение, которое вы используете в настоящее время, является поддельным и будет запрещать много действительных адресов электронной почты. Отказ от клиентов, потому что их адрес электронной почты не соответствует вашему представлению о том, что адрес электронной почты отстой.
Проверка правильности адресов электронной почты с помощью регулярных выражений нелепо трудна . Лучше включить только тривиальную проверку для явно искаженных строк, как указано выше. Если вам нужно действительно проверить адрес электронной почты, вам придется попытаться отправить ему письмо или, по крайней мере, попытаться найти часть адреса домена для MXer.
См. этот вопрос для обсуждения.