2011-08-09 30 views
12

estoy trabajando en un método de recuperación de un conjunto de entradas ocultas en mi forma como tal¿Cómo verificar el valor vacío en Javascript?

<input type="hidden" value="12:34:00" name="timetemp0"> 
<input type="hidden" value="14:45:00" name="timetemp1"> 
<input type="hidden" value="15:12:00" name="timetemp2"> 
<input type="hidden" value="16:42:12" name="timetemp3"> 
<input type="hidden" value="16:54:56" name="timetemp4"> 
<input type="hidden" value="17:03:10" name="timetemp5"> 

Mi función javascript recupera estos de forma individual mediante el uso de getElementsByName ('timetemp' + i)

for (i ; i < counter[0].value; i++) 
     { 
//finds hidden element by using concatenation of base name plus counter 

var timetemp = document.getElementsByName('timetemp'+i); 

//if there is a value alert that value to user - this is just for testing purposes at the moment 
//because there is only one of timetemp.i then it occupies position 0 in array 
      if (timetemp[0].value == null) 
      { 
       alert ('No value'); 

      } 
      else 
      { 
       alert (timetemp[0].value); 

      } 
} 

Así que lo que debería ocurrir es que alertará al usuario del valor en ese campo oculto, pero si viene a través de una entrada sin valor como esto:

<input type="hidden" value="" name="timetemp16"> 

Entonces dirá "No hay ningún valor"

Sin embargo TH si parece que no puede trabajar con esta función:

que he intentado:

  1. (timetemp[0].value == null)
  2. (timetemp[0].value === null)
  3. (timetemp[0].value == undefined)
  4. (timetemp[0].value == '')

Siempre parece estar predeterminado en la cláusula else.

¿Alguna idea?

+0

Intentar apenas si '(timetime [0] .value)' –

+1

http://stackoverflow.com/questions/154059/what-is-the-best-way-to- check-for-an-empty-string-in-javascript podría ayudar – Im0rtality

+0

@Richard D ¡tu solución funcionó a la perfección! Desearía poder darte los puntos. ¿Podrías responder mi pregunta y acepto tu respuesta? – sqlmole

Respuesta

28

comentario como respuesta:

if (timetime[0].value) 

Esto funciona porque cualquier variable en JS puede ser evaluado como booleano, por lo que generalmente detectará elementos que están vacíos, nulos o indefinidos.

3

En primer lugar, me gustaría comprobar lo i consigue inicializado a, para ver si los elementos devueltos por getElementsByName son lo que usted piensa que son. Tal vez dividir el problema intentándolo con un nombre codificado como timetemp0, sin la concatenación. También puede ejecutar el código a través de un depurador de navegador (FireBug, Chrome Dev Tools, IE Dev Tools).

Además, si para su condición, esto debería ser suficiente:

if (!timetemp[0].value) { 
    // The value is empty. 
} 
else { 
    // The value is not empty. 
} 

La cadena vacía en Javascript es un valor Falsey-, por lo que la negación lógica de que le conseguirá en el bloque si.

1

Su script parece ser incorrecto en varios lugares.

probar este

var timetemp = document.getElementsByTagName('input'); 

for (var i = 0; i < timetemp.length; i++){ 
    if (timetemp[i].value == ""){ 
     alert ('No value'); 
    } 
    else{ 
     alert (timetemp[i].value); 
    } 
} 

Ejemplo: http://jsfiddle.net/jasongennaro/FSzT2/

Esto es lo que he cambiado:

  1. comenzó por conseguir todos los input s a través de TagName. Esto hace que una matriz
  2. haya inicializado i con un var y luego haya realizado un bucle a través de la matriz timetemp utilizando la propiedad timetemp.length.
  3. utiliza para hacer referencia a cada timetemp[i]input en el for statement
+2

ERES INCORRECTO por qué querría encontrar todas las entradas, tengo más de 50 entradas en mi formulario, solo quiero encontrar timetemp0, timetemp1, timetemp2 - ¡esto no se adapta a esto! – sqlmole

+1

Lo suficientemente justo @sqlmole. Pero no hay necesidad de gritar. Solo estoy tratando de ayudarte. Respondí basándote en tu pregunta, que no menciona otras entradas. –

0

El contador en su bucle aparece incorrecta (o que se está perdiendo algo de código). Here's a working Fiddle.

este código:

//Where is counter[0] initialized? 
for (i ; i < counter[0].value; i++) 

debe sustituirse por:

var timeTempCount = 5; //I'm not sure where you're getting this value so I set it. 

for (var i = 0; i <= timeTempCount; i++) 
+0

¿Cómo sabes que OP necesita validar para XHTML? El '/>' no es un requisito absoluto. – user113716

+0

Estoy usando HTML5, pero gracias por el ejemplo del código en caso de que use XTHML 1.1 en el futuro – sqlmole

0

En mi opinión, usar "if (value)" para juzgar un valor si es vacío no es estricto, porque el resultado de "v? True: false" es falso cuando el valor de v es 0 (0 no es un valor vacío). Se puede utilizar esta función:

const isEmptyValue = (value) => { 
    if (value === '' || value === null || value === undefined) { 
     return true 
    } else { 
     return false 
    } 
} 
Cuestiones relacionadas