2012-05-15 3 views
7

Я хочу проверить, существует ли тег ввода с именем «field2», когда пользователь заполняет входное имя «field1». Я делаю это, выполняя функцию JavaScript, используя событие onchange в теге input field1. (Я тестирую с помощью предупреждающих ящиков.) Если field2 не существует, JavaScript нажимает кнопку, и форма обновляется, чтобы иметь как поле1, так и поле2. Но окно предупреждения появляется, даже когда поле2 существует независимо от того, какой из 3 методов я использую. Я пробовал всевозможные комбинации, используя if с null и 'undefined' и т. Д.Проверьте, существует ли вход формы

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

function foobar(){ 

if(!document.getElementsByName("field2"){ 
alert("foobar"); 
} 

if(!document.forms[0].field2){ 
alert("foobar"); 
} 

if(!document.forms[0].elements.namedItem("field2"){ 
alert("foobar"); 
} 
} 
+0

Создайте http://jsfiddle.net/, включая свой HTML-код. –

+0

Btw, ваш код не совсем корректен, но я не могу воспроизвести поведение, которое вы видите. Если 'field2' существует, предупреждение не появляется: http://jsfiddle.net/jS7dT/. Вы должны предоставить дополнительную информацию ... –

ответ

2

На самом деле, проблема заключалась в том, что страница имела различные формы и поэтому forms[0] не имела в виде формы я хотел. Поэтому я думаю, что лучший способ - использовать this и напрямую обратиться к полю input. Кроме того, более ясно сравнить с undefined, а не с !.

Это работает:

function foobar(fooform){ 
    if (fooform.field2 === undefined) { 
     alert("foobar"); 
    } 
} 

Вызывается, как это:

foobar(this.form); 
+0

, и он должен быть fooform.field2, старый с (fooform) {if (field2) ...} выдает ошибку, которая не определена в поле2. – ppostma1

+0

, связанный с этим, 'if (fooform.field2! = Undefined) { alert (" foobar "); } ' для всех, кто читает это, убедитесь, что вы не используете' fooform.field2.value' или ссылаетесь на какие-либо другие атрибуты, потому что это не сработает. –

6

Вы пропускаете кронштейн: if(!document.getElementsByName("field2"))

+5

Также на 'if (! Document.forms [0] .elements.namedItem (" field2 ")' – jmar777

+1

@ jmar777: Правильно, я даже не читал код, который далеко;) – Amberlamps

+1

Требуется деревня ... или что-то в этом роде: p – jmar777

0

Только для обновления с тех пор, используя getElementsByName и сравните нуль не работает должным образом больше. Теперь работает проверка длины элемента.

if(document.getElementsByName("field2").length<=0) { 
    // then field2 does not exist 
} 
Смежные вопросы