Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Проблемка с формой (https://javascript.ru/forum/events/46386-problemka-s-formojj.html)

andrey888 08.04.2014 11:11

Проблемка с формой
 
Есть небольшая непонятка с обработкой данных из формы .. Простая ситтуация.
берем данные инпутов и делаем вот так
function Form_Check(){
if(document.sale.bla1.value==''){document.sale.bla1.style.background='#e1757a' ;alert('пропущено поле');return false;}
if(document.sale.bla2.value==''){document.sale.bla2.style.background='#e1757a' ;alert('пропущено поле');return false;}
if(document.sale.bla3.value==''){document.sale.bla3.style.background='#e1757a' ;alert('пропущено поле');return false;}
return true;
}

вот так по деревянному все работает отлично, возвращает false если одно из полей незаполнено, но если делаю красивее
function Form_Check(){
var err=0;
var adata = new Array('bla1','bla2','bla3');

for (var i=0;i < adata.length;i++){
 if(document.sale.adata[i].value==''){document.sale.adata[i].style.background='#e1757a'; err++;} 	
 }
if(err > 0){alert('Вы что-то пропустили. Укажите всю необходимую информацию'); return false;}else{return true;}
}

то возвращает true .. не пойму, может глаз замылился и я не вижу ошибки..

nice_try 08.04.2014 11:27

что выводит typeof adata[i] ?

andrey888 08.04.2014 11:38

nice_try выдает undefined.. почему не стринг

nice_try 08.04.2014 11:43

это должна быть ссылка на дом элемент, ведь ты пытаешь получить его value; string и undefined - не то, что тебе нужно

andrey888 08.04.2014 11:51

Вставлять в массив document.sale.bla1.value, document.sale.bla2.value ?? или в данном случае можно сделать красивее=короче ссылку на дом каким то образом ??

jsnb 08.04.2014 12:21

document.sale.adata[i].value

заменить на
document.sale[adata[i]].value

С изменением стиля аналогично. К форме лучше обращаться через forms, или сделать нормальную ссылку, например, по id через getElementById.

andrey888 08.04.2014 12:43

jsnb спасибо. работает.
Лучше обращаться наслучай если в дом появится элемент с таким же именем ? .. или есть вариант что с обращением к имени не будет работать во всех браузерах ?

jsnb 08.04.2014 13:06

Цитата:

Сообщение от andrey888 (Сообщение 306702)
jsnbЛучше обращаться наслучай если в дом появится элемент с таким же именем ? .. или есть вариант что с обращением к имени не будет работать во всех браузерах ?

Не знаю как там с кроссбраузерностью, т.к. никогда в голову не приходило использовать name для идентификации элементов. name нужен для элементов формы, это его предназначение. Он не обязан быть уникальным в пределах документа, в отличии от id. Да и читабельность кода получается фиговая. В общем, это то еще извращение. Есть id, есть классы, а name оставь для элементов формы.

andrey888 08.04.2014 13:24

ок тогда что лучше из этих двху вариантов ?
if(document.forms['sale'][adata[i]].value==''){document.forms['sale'][adata[i]].style.background='#e1757a'; err++;}

или 

var aform=document.getElementById('sale_form');
 if(aform[adata[i]].value==''){aform[adata[i]].style.background='#e1757a'; err++;}

или тут уже на усмотрение каждого и особой разницы нет ..?

jsnb 08.04.2014 13:30

Цитата:

Сообщение от andrey888 (Сообщение 306711)
или тут уже на усмотрение каждого и особой разницы нет ..?

Тут особой разницы нет. В варианте с forms главное чтобы name форм был уникален на странице.
Вот это почитай: http://learn.javascript.ru/traversing-dom#формы
Там есть описание возможных проблем при обращении напрямую. По хорошему к влементам формы надо обращаться через document.forms[form_name/index].elements[element_name/index]


Часовой пояс GMT +3, время: 16:48.