2012-03-25 13 views
6

¿Puede alguien decirme cómo obtener valores de varios campos de entrada?Obtener una matriz de valores de múltiples entradas usando jQuery

tengo una lista con varias entradas como esta:

<li> 
<label>Additional Title: </label><input type='text' name='additionaltitlename' ... /> 
</li> 
<li> 
<label>Additional Title: </label><input type='text' name='additionaltitlename' ... /> 
</li> 

tengo una solución en Javascript (el formulario de envío):

... 
var extratitles = document.getElementsByName('additionaltitlename'); 
var str = ''; 
     for (var i = 0; i < extratitles.length; i++) { 
     str = str + '|' + extratitles.item(i).value; 
    } 
} 

¿Cómo puedo hacer la misma cosa en jQuery? serialize nativa función

Respuesta

16

No es válido tener dos entradas del mismo nombre. Si quieres hacer esto, puede utilizar <input name="titles[]">

Puede probar esto:

<input name="titles[]"> 
<input name="titles[]"> 
​<button>submit</button>​​​​​​​​​​​​​​​​​​​​​​​ 

Con esta jQuery

// click handler 
function onClick(event) { 
    var titles = $('input[name^=titles]').map(function(idx, elem) { 
    return $(elem).val(); 
    }).get(); 

    console.log(titles); 
    event.preventDefault(); 
} 

// attach button click listener on dom ready 
$(function() { 
    $('button').click(onClick); 
}); 

See it working here on jsFiddle

EDITAR

Esta respuesta da usted los títulos en una matriz en lugar de una cadena usin g un separador |. Personalmente, creo que esto es mucho más útil.

Si acaba de enviar el formulario y desea admitir varios valores, utilice el método .serialize como se describe en la otra respuesta

+0

¿Por qué no usar 'this.value'? ¿Es realmente necesario usar _jQuery_ para cada operación simple? –

+0

@IulianOnofrei, [dígame si es necesario] (https://github.com/jquery/jquery/blob/master/src/attributes/val.js#L10-L69). El objetivo de usar una lib como jQuery es: a) aliviar la preocupación por la mayoría de los casos de esquina, yb) proporcionar una API coherente e intuitiva. Sí, para los elementos INPUT, puede usar 'this.value' de forma bastante confiable, pero eso cambia para cosas como SELECT. De cualquier manera, jQuery no se preocupa y le da un método intuitivo '.val' para trabajar en cualquier escenario. –

+0

@IulianOnofrei, además, proporcioné una respuesta que utiliza jQuery y se escribió utilizando jQuery modismos * porque * esta pregunta fue etiquetada con 'jquery'. Si esta es una pregunta de JavaScript vainilla, la habría respondido de manera completamente diferente. –

2

Uso de jQuery:

var data = $('input[name="additionaltitlename"]').serialize(); 

docs

El método .serialize() crea una cadena de texto en notación estándar de codificación URL. Opera en un objeto jQuery que representa un conjunto de elementos de formulario.

+0

Esto en realidad no poner los títulos en forma viable si él quiere hacer adicional procesamiento con javascript –

+0

@macek. él escribió que quiere enviar los valores con una solicitud ajax. 'serialize()' es la solución nativa. – gdoron

0

Medios:

str = ''; 
$("input[type='text']").each(function() { 
str = str + '|' + $(this).val(); 
}); 

o

str = ''; 
$("input[name='additionaltitlename']").each(function() { 
str = str + '|' + $(this).val(); 
}); 

?

0

Además de la respuesta de @gdoron o @ macek, que probablemente sea el camino a seguir, me gustaría añadir que todo lo que está mal con el código que ha publicado es que tiene un } demasiado. Esto funciona (aunque todavía tiene margen de mejora):

$('#getpreviewbutton').click(function(){ 

    var extratitles = document.getElementsByName('additionaltitlename'); 
    var str = ''; 
      for (var i = 0; i < extratitles.length; i++) { 
      str = str + '|' + extratitles.item(i).value; 
      } 

});​ 

Ver: http://jsfiddle.net/8XJcc/

No sé qué navegador está usando, pero utilizando algo como Firebug o las herramientas de Chrome Dev puede ser bastante útil para detectar errores simples como este. Ver this reference para Chrome o this one para Firefox. Incluso IE tiene uno, solo presione F12.

Cuestiones relacionadas