Скрипт не работает в Опере и IE
Здравствуйте всем.
По существу: Скрипт:
<script>
function validateForm()
{
var x=document.forms["myForm"]["name"].value;
var y=document.forms["myForm"]["phone"].value;
var z=document.forms["myForm"]["meil"].value;
if (x==null || x=="Ваше Имя" || x==" Ваше Имя")
{
alert("Необходимо заполнить поле Имя!");
return false;
}
if ((y==null || y==" Ваш Телефон" || y=="Ваш Телефон") && (z==null || z==" Ваш Email" || z=="Ваш Email"))
{
alert("Необходимо заполнить поле Телефон или Email!");
return false;
}
}
</script>
Форма
<form method='POST' name="myForm" onsubmit="return validateForm()">
<input type='text' name='name' class='input' onclick="this.value='';" onfocus="this.select()" onblur="this.value=!this.value?' Ваше Имя':this.value;" value="Ваше Имя">
<input type='text' name='phone' class='input' onclick="this.value='';" onfocus="this.select()" onblur="this.value=!this.value?' Ваш Телефон':this.value;" value="Ваш Телефон">
<input type='text' name='meil' class='input' onclick="this.value='';" onfocus="this.select()" onblur="this.value=!this.value?' Ваш Email':this.value;" value="Ваш Email">
<textarea name="comment" cols="27" rows="3" onclick="this.value='';" onfocus="this.select()" onblur="this.value=!this.value?' Ваш Комментарий':this.value;" value="Ваш Комментарий">Ваш Комментарий</textarea>
<input onclick="yaCounter23826040.reachGoal('zakazzvonka'); return true;">
<input type='hidden' name='qwe' value='1'>
</form>
Во всех браузерах алерты всплывают, в Опере и IE - нет. Консоль оперы выдаёт: Event thread: submit Uncaught exception: TypeError: Cannot convert 'document.forms["myForm"]["name"]' to object Error thrown at line 33, column 5 in validateForm() in http://site: var x=document.forms["myForm"]["name"].value; called from line 1, column 0 in <anonymous function>(event) in http://site: return validateForm() Поделитесь соображениями, пожалуйста... |
alex-boa,
а что возвратит функция когда всё правильно? |
отправляет письмо методом post. ну, вернее передаёт в форму разрешение на отправку...
|
Цитата:
|
а его там и нет. при несоблюдении условий заполнения полей вызывается запрет, а по умолчанию - разрешение есть. но с этим проблем нет. письма отправляются. проблема в том, что в опера и IE они отправляются и при несоблюдении условий заполнения полей…. т.е. скрипт, запрещающий их отправку не работает… и алертов нет.
|
alex-boa,
версии браузеров где глюк? |
opera 12.16
IE 9 кстати в opera 19 на макинтоше работает... |
Цитата:
Либо переименуй инпут, либо document.forms["myForm"].elements["name"] |
Спасибо, но оба способа не помогли (форма отправляется, алертов нет)
Консоль оперы: Event thread: submit Uncaught exception: TypeError: Cannot convert 'document.forms["myForm"].elements' to object Error thrown at line 33, column 5 in validateForm() in http://site: var x=document.forms["myForm"].elements["name"].value; called from line 1, column 0 in <anonymous function>(event) in http://site: return validateForm() Event thread: submit Uncaught exception: TypeError: Cannot convert 'document.forms["myForm"]["name1"]' to object Error thrown at line 33, column 5 in validateForm() in http://site: var x=document.forms["myForm"]["name1"].value; called from line 1, column 0 in <anonymous function>(event) in http://site: return validateForm() |
alex-boa,
а как форму отправить ? на чего нажать нужно? |
<input onclick="yaCounter23826040.reachGoal('zakazzvonka' ); return true;">
только ему надо присвоить тип image и картинку какую-нибудь вставить. я её немного здесь упростил. Верстал дизайнер, косяков вагон… ...ну или можно просто тип кнопки присвоить... |
Блин, че ты панику развел? Твой код работает без всяких изменений. Тестил в опере 12.14 под виндой и в IE9
<!DOCTYPE html>
<meta charset="utf-8" />
<form method='POST' name="myForm" onsubmit="return validateForm()">
<input type='text' name='name' class='input' onclick="this.value='';" onfocus="this.select()" onblur="this.value=!this.value?' Ваше Имя':this.value;" value="Ваше Имя">
<input type='text' name='phone' class='input' onclick="this.value='';" onfocus="this.select()" onblur="this.value=!this.value?' Ваш Телефон':this.value;" value="Ваш Телефон">
<input type='text' name='meil' class='input' onclick="this.value='';" onfocus="this.select()" onblur="this.value=!this.value?' Ваш Email':this.value;" value="Ваш Email">
<textarea name="comment" cols="27" rows="3" onclick="this.value='';" onfocus="this.select()" onblur="this.value=!this.value?' Ваш Комментарий':this.value;" value="Ваш Комментарий">Ваш Комментарий</textarea>
<input onclick="yaCounter23826040.reachGoal('zakazzvonka'); return true;">
<input type='hidden' name='qwe' value='1'>
<button type="submit">s</button>
</form>
<script>
function validateForm()
{
var x=document.forms["myForm"]["name"].value;
var y=document.forms["myForm"]["phone"].value;
var z=document.forms["myForm"]["meil"].value;
if (x==null || x=="Ваше Имя" || x==" Ваше Имя")
{
alert("Необходимо заполнить поле Имя!");
return false;
}
if ((y==null || y==" Ваш Телефон" || y=="Ваш Телефон") && (z==null || z==" Ваш Email" || z=="Ваш Email"))
{
alert("Необходимо заполнить поле Телефон или Email!");
return false;
}
}
</script>
|
Цитата:
|
ну в общем-то он у меня тоже везде работает))
но вот тут http://sunboa.ru/project5 перестал. Думал, что дело где-то в js и форме, который я раннее не замечал... |
<!DOCTYPE html>
<meta charset="utf-8" />
<form method='POST' onsubmit="return validateForm(this)">
<input type='text' name='name' class='input' placeholder="Ваше Имя">
<input type='tel' name='phone' class='input' placeholder="Ваш Телефон">
<input type='email' name='meil' class='input' placeholder="Ваш Email">
<textarea name="comment" cols="27" rows="3" placeholder="Ваш Комментарий"></textarea>
<input onclick="yaCounter23826040.reachGoal('zakazzvonka'); return true;">
<input type='hidden' name='qwe' value='1'>
<button type="submit">s</button>
</form>
<script>
function validateForm(form) {
var errors = [];
if (!form.name.value)
errors.push("Необходимо заполнить поле Имя!");
if (!form.phone.value && !form.meil.value)
errors.push("Необходимо заполнить поле Телефон или Email!");
if (errors.length > 0)
alert(errors.join('\n'));
return errors.length == 0;
}
</script>
Плюс находим на просторах интернета и подключаем placeholder.js На всякий случай еще дублируем плейсхолдер атрибутом title. |
alex-boa,
кто-то не любит делать промежутки между атрибутами и суёт лишние кавычки строка 305 и ей подобные типа 198 и тд |
alex-boa,
если элемента нет нефиг искать у него стиль document.getElementById('nomer4').style.display |
Спасибо всем за обсуждение.
Оказался первобытный косяк - несколько форм с одинаковыми именами. Идентифицировал каждую разным именем и всё заработало... |
| Часовой пояс GMT +3, время: 06:31. |