2009-09-25 18 views
7

que tienen una forma dinámica en la que el usuario proporciona un nombre y una descripción:¿Por qué .val() no es una función?

<label>Name</label><br /> 
<input type="text" name="name[]" maxlength="255" /><br /> 

<label>Description</label><br /> 
<textarea name="desc[]"></textarea><br /> 

Estoy tratando de validar el formulario con Javascript para asegurar que si se especifica el nombre, a continuación, se debe introducir una descripción.

$("input[name='name[]']").each(function() { 
    var index = $("input[name='name[]']").index(this); 
    if ($(this).val() != '') { 
     alert($("textarea[name='desc[]']").get(index).value); 
     alert($("textarea[name='desc[]']").get(index).val()); 
    } 
} 

La primera alerta() funciona como se espera sin embargo con la segunda alerta consigo: $ ("desc [ '[]' name =] de área de texto") obtener (índice) .val() no lo es. una función

¿Cuál es la diferencia? ¿Por qué no puedo usar la función jQuery?

+0

Sus etiquetas son bastante inútil, ya que son en este momento. Bríndeles los atributos "para" adecuados y asócielos con los elementos correspondientes de entrada/área de texto. – kangax

Respuesta

15

Use eq(index) en lugar de get(index) y devolverá un objeto jQuery. El objeto jQuery tendrá un método val() que debería funcionar como se espera para un área de texto.

val() documentation

Un valor se devuelve para todos los elementos de entrada, incluyendo selecciona y áreas de texto. Para selecciones múltiples, se devuelve una matriz de valores .

Ejemplo:

$("input[name='name[]']").each(function() { 
    var index = $("input[name='name[]']").index(this); 
    if ($(this).val() != '') { 
     alert($("textarea[name='desc[]']").eq(index).val()); 
    } 
}); 
17

Debido

$("textarea[name='desc[]']").get(index); 

es objeto DOM, no jquery. No tiene método val. Use

$("textarea[name='desc[]']:eq(" + index + ")").val(); 

para textarea value.

Cuestiones relacionadas