2011-11-28 20 views
12

Deseo repetir un formulario, agregando cada elemento a un área. El problema es que algunos de estos elementos son select, input y textboxes. Sé que puedo usar :input para resolver el problema aquí (aunque realmente no lo necesito). El problema es que tengo problemas para determinar cómo puedo ver si el elemento es un área de texto, entrada, seleccionar, etc. Necesito hacer esto correctamente porque, hasta donde yo sé, jQuery("input#someinput").val() funciona muy bien para las entradas, pero para un área de texto, puedo necesitar jQuery("textarea#sometexarea").text(). No estoy seguro si esto existe ...determinar entrada vs textarea en jQuery

De todos modos, aquí está mi función hasta el momento:

function getAllFormElements(id) { 

    var elements = new Array(); 

    jQuery(id).children().map(function(){ 

     for (var index = 0; index < children.length; index++) { 

      elements[i] = jQuery(children[i]).val(); 

     } 

    }) 

     return elements; 
} 

Respuesta

46

val() funciona igual de bien con <input>, <select> y <textarea> elementos.

Si aún desea determinar el tipo real de los elementos que coinciden con el selector de :input, puede utilizar is() con element selectors:

$(":input").each(function() { 
    var $this = $(this); 
    if ($this.is("input")) { 
     // <input> element. 
    } else if ($this.is("select")) { 
     // <select> element. 
    } else if ($this.is("textarea")) { 
     // <textarea> element. 
    } 
}); 
+0

Perfecto. Justo lo que necesitaba. Gracias. – zeboidlund

+0

+1, solución agradable 'Frédéric', lo encontré hoy y funcionó para mí también. @aboutblank: debe marcar esta respuesta como aceptada, ya que parece que también resolvió su problema. – Nope

+0

Acabo de hacer, gracias por la notificación. :) – zeboidlund

0

$.val() obras para ambas entradas y áreas de texto. Solo necesita $.text() para cosas como divs que no tienen un "valor" per se.

3

Debería poder utilizar la función .is() de jQuery - simplemente pase un selector a .is() y devolverá verdadero si el elemento coincide con el selector. Por lo tanto, para ver si tenía un área de texto, usted acaba de comprobar:

if($(this).is("textarea")) { doStuff(); } 

http://api.jquery.com/is/

0

¿Está quizá buscando la $(children[i]).attr("tagName");, que devuelve la etiqueta del elemento , ya sea seleccionando, ingresando o textarea?

3

Mire la propiedad nodeName.

jQuery(id).children().map(function(){ 
    console.log(children[i].nodeName.toLowerCase()); 
}); 

se puede, pero no tiene que utilizar el método is de jQuery (gastos generales aquí).

+0

Usar' nodeName' está bien, pero ten cuidado con el caso.Dependiendo del tipo de documento (HTML o XML), el caso del valor devuelto no será el mismo (mayúscula o tal cual, respectivamente). –

+1

tienes razón, he actualizado el fragmento de código :) – pomeh

0

En cuanto a la documentación de jQuery, usted puede conseguir fácilmente todas las entradas de formulario utilizando $(:input): http://api.jquery.com/input-selector/

Descripción: Selecciona todos los elementos de entrada, área de texto, seleccionar y botones. El selector de entrada básicamente selecciona todos los controles de formulario.

.val() también trabaja con áreas de texto, pero hay un problema ... ver los documentos de referencia: http://api.jquery.com/val/

Frederic registró su respuesta cuando estaba escribiendo esto, y su solución de utilizar is() duda lo prueba.

Cuestiones relacionadas