2012-03-15 14 views
6

tengo una matriz HTML;obtener elementos html array con jquery

<input class="input_box" name="authors[]" id="author1"/> 

lo que quiero hacer es, obtener el valor de esta matriz de una pantalla sin actualizar la página, (hago mostrar el valor justo al lado del campo de entrada, de forma independiente div)

$(document).ready(function(){  
$("input[id^="author"]").change(update); 
}); 
    function update(){ 
    var authors=new Array(); 
    $("input[id^="author"]").each(function(){authors.push($(this).text()) }); 
    var author= '"' + authors.join('", "') + '"'; 

    $('#val-authors').html('authors:<span class="red"> "'+author+'"</span>');} 

Lo único que veo en <div id="val-authors"> es, "",

¿Qué me falta?

gracias de antemano ..

Respuesta

7

Su selector:

$("input[id^="author"]") 

es incorrecta, ya que está tratando de usar comillas dobles dentro comillas dobles. Uno de los pares debe ser comillas simples.

Si estaba utilizando un depurador JS esto debería ser inmediatamente visible.

Fwiw, se trata de una forma más limpia de la recuperación de la matriz requerida:

var authors = $('input[id^="author"]').map(function() { 
    return this.value; 
}).get(); 
1

Cambio:

$("input[id^="author"]").change(update); 

Para:

$("input[id^='author']").change(update); 
3

su "arsenal html" no es una matriz en absoluto, incluso suponiendo que hay una serie de otras entradas similares (aunque cuando el formulario se envía a su idioma de servidor elegido li kely le permite acceder a los valores de las entradas con el mismo nombre que una matriz). De todos modos ...

El principal problema es que su JS tiene un error de sintaxis:

$("input[id^="author"]") 

Si desea incluir comillas dobles dentro de una cadena entre comillas dobles literales que tiene que hacer escapar de ellos:

$("input[id^=\"author\"]") 

O citar la cadena con sencillos:

$('input[id^="author"]') 

puede ser más eficiente para evitar la El atributo comienza con el selector con el atributo id y selecciona por el atributo name, notando que para jQuery los corchetes en el nombre del atributo deben ser escapados con barras invertidas, y para los literales JS las barras invertidas también deben ser escapadas:

$('input[name="authors\\[\\]"]') 

también para obtener el valor de una entrada con jQuery utilizar en lugar de .val().text(), pero es más eficiente que sólo tiene que utilizar this.value:

var authors = []; 
$('input[id^="author"]').each(function(){ authors.push(this.value); }); 

también me gustaría recomendar matrices se declaran con = [] en lugar de = new Array().

+0

gracias @nnnnnn, no mencioné aquí pero tengo otro javascript que se agrega a los autores [], así que tengo varios autores de hecho. ¡Probé tu consejo y reemplacé .text() a .val() y baam! gracias .. – teutara

+0

Cool. Feliz de ayudar. (Entendí que tenía múltiples elementos 'authors []', pero mi punto sobre la matriz es que html no tiene matrices.) – nnnnnn