2012-05-15 29 views
7

Voglio verificare se esiste un tag di input denominato "campo2" quando l'utente sta compilando il nome di input "campo1". Lo faccio eseguendo una funzione JavaScript utilizzando l'evento onchange sul tag input di field1. (Sto testando le caselle di avviso.) Se field2 non esiste, JavaScript fa clic su un pulsante e il modulo viene aggiornato per avere sia field1 che field2. Ma la finestra di avviso si apre anche quando field2 esiste, indipendentemente dai 3 metodi che uso. Ho provato tutti i tipi di combinazioni usando con null e 'undefined', ecc.Verificare se esiste un input di modulo

Perché le caselle di avviso si aprono se il campo2 esiste?

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

Si prega di creare un http://jsfiddle.net/ compreso il codice HTML. –

+0

Btw, il tuo codice non è completamente corretto, ma non riesco a riprodurre il comportamento che vedi. Se 'field2' esiste, non viene visualizzato alcun avviso: http://jsfiddle.net/jS7dT/. Devi fornire maggiori informazioni ... –

risposta

2

In realtà, il problema era che la pagina ha avuto varie forme e quindi forms[0] non si riferiva alla forma che volevo. Quindi penso che il modo migliore sia usare this e fare riferimento direttamente al campo input. Inoltre, è più chiaro confrontare con undefined anziché !.

Questo funziona:

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

Chiamato in questo modo:

foobar(this.form); 
+0

e deve essere fooform.field2, il vecchio con (fooform) {if (field2) ...} genera un errore che field2 non è definito. – ppostma1

+0

piggybacking su questo, 'if (fooform.field2! = Undefined) { alert (" foobar "); } ' per chiunque altro legga questo, assicurati di non utilizzare' fooform.field2.value' o di fare riferimento a nessun altro attributo, perché non funzionerà. –

6

vi manca una parentesi: if(!document.getElementsByName("field2"))

+5

Anche su 'if (! Document.forms [0] .elements.namedItem (" field2 ")' – jmar777

+1

@ jmar777: Giusto, non ho nemmeno letto il codice fino a qui;) – Amberlamps

+1

Ci vuole un villaggio ... o qualcosa del genere: p – jmar777

0

solo per aggiornare da quando uso getElementsByName e confrontare per nulla non funziona più correttamente. Ciò che funziona ora è il controllo della lunghezza dell'elemento.

if(document.getElementsByName("field2").length<=0) { 
    // then field2 does not exist 
} 
Problemi correlati