2012-05-15 13 views
7

Quiero comprobar si existe una etiqueta de entrada denominada "campo2" cuando el usuario está llenando el nombre de entrada "campo1". Lo hago ejecutando una función de JavaScript usando el evento onchange en la etiqueta input de field1. (Estoy probando el uso de cuadros de alerta). Si el campo 2 no existe, JavaScript hace clic en un botón y el formulario se actualiza para tener tanto el campo1 como el campo2. Pero el cuadro de alerta aparece incluso cuando el campo 2 existe, sin importar cuál de los 3 métodos use. Probé todo tipo de combinaciones usando if con null y 'undefined', etc.Compruebe si existe una entrada de formulario

¿Por qué aparecen los cuadros de alerta si campo2 existe?

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

Cree un http://jsfiddle.net/ incluyendo su código HTML. –

+0

Por cierto, su código no es completamente correcto, pero no puedo reproducir el comportamiento que ve. Si 'field2' existe, no aparece ninguna alerta: http://jsfiddle.net/jS7dT/. Tiene que proporcionar más información ... –

Respuesta

2

En realidad, el problema era que tenía la página de diversas formas y por lo tanto forms[0] no se refería a la forma que quería. Así que creo que la mejor manera es usar this y consultar directamente el campo input. Además, es más claro compararlo con undefined en lugar de !.

Esto funciona:

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

llama así:

foobar(this.form); 
+0

y tiene que ser fooform.field2, el anterior con (fooform) {if (field2) ...} arrojará un error de que field2 no está definido. – ppostma1

+0

piggybacking en este caso, 'if (fooform.field2! = Undefined) { alert (" foobar "); } ' para cualquier otra persona que lea esto, asegúrese de no estar utilizando' fooform.field2.value' o haciendo referencia a otros atributos, porque eso no funcionará. –

6

se echa en falta un soporte: if(!document.getElementsByName("field2"))

+5

También en 'if (! Document.forms [0] .elements.namedItem (" field2 ")' – jmar777

+1

@ jmar777: Correcto, ni siquiera leí el código hasta ese punto;) – Amberlamps

+1

Toma un pueblo ... o algo así: p – jmar777

0

Sólo para actualizar ya que el uso getElementsByName y comparar a cero no funciona correctamente más. Lo que funciona ahora es verificar la longitud del elemento.

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