2010-05-13 29 views
8

Por alguna extraña razón, cuando tengo un selector y espero obtener varios elementos, jQuery solo devuelve el primer elemento, en lugar de la colección completa.jQuery solo devuelve el primer artículo

Este es el código HTML que tengo:

<a id="reply-424880" class="reply" href="#" rel="nofollow">Reply</a> 
<a id="reply-424885" class="reply" href="#" rel="nofollow">Reply</a> 

y el selector:

$('.reply').unbind('click').click(function(event) { 
... 
} 

He tratado de depuración utilizando FireBug, y aún así obtener los mismos resultados. Utilizando el trabajo en torno a que puede conseguir que funcione:

$('a').each(function (index, element) { 
      if ($(element).attr('class') == 'reply') { 
       $(this).unbind('click').click(function(event) { 
        ... 
       }); 
      } 
}); 

me gustaría utilizar la funcionalidad integrada en lugar de mi trabajo alrededor. ¿Alguna idea de por qué solo se devolvería el primer elemento?

+0

¿'console.log ($ ('. Reply'))' realmente devuelve solo un elemento? – Tomalak

+2

¿Está seguro de que ese es el problema (solo devuelve un artículo)? ¿Qué devuelve $ ('. Reply'). Length? – JohnFx

+0

En esta página, tengo 51 enlaces en la página y 7 enlaces con una clase de "respuesta". $ ('. Reply'). Length; devuelve "1", y $ ('a'). length; return "51" Tengo este problema en otras 2 páginas que no están relacionadas con "respuestas". Es posible que algo en mi página impida que el selector funcione, pero no sé qué buscar. –

Respuesta

1

Después de dejar la solución en lugar de un par de meses, yo decidimos probar para ver si había algo en la página que estaba causando el problema.

Por proceso de eliminación, pude reducir el error al archivo jquery.validate.js. Por algún motivo desconocido, este archivo provocaba que jQuery solo devolviera el primer valor. Descargué la última versión y los selectores ahora devuelven todos los elementos que coinciden.

0

que debería funcionar, pero ¿qué pasa con ...

$('.reply').each(function() { 
    $(this).unbind('click').click(function(event) { 
     ... 
    }); 
}); 
+0

este no es el problema, –

3

Lo que tienes deben estar trabajando ya, you can see an example here, esto es una simple llamada:

$('.reply').unbind('click').click(function(event) { 
    alert('hi there'); 
});​ 

Debe tener algo que está fuera de la cuestión afectando sus enlaces si el mismo controlador no se ejecuta para todos ellos. Si obtienes un attribute desde el primero, asegúrate de que dentro de tu función no estés haciendo algo como $(".reply").attr("id"), deberías estar usando this dentro del controlador, obtendrás el atributo del primer elemento coincidente.

Here's an example:

$('.reply').unbind('click').click(function(event) { 
    alert($('.reply').attr("id")); //alerts "reply-424880" for both 
});​ 

It should be like this:

$('.reply').unbind('click').click(function(event) { 
    alert($(this).attr("id")); //alerts "reply-424880" for both 
    //and use just this.id in this case, no need for jQuery .attr(), like this 
    //alert(this.id); 
});​ 
+0

Sí, no veo dónde podrían estar yendo mal ... Definitivamente una simple llamada. +1 – Gabe

17

Torpemente, también tuve este problema y resultó que Chrome parece tener una función $() similar a jquery que implementa un subconjunto de lógica de selector de una manera similar, pero falta un montón de funciones:

> $ 
function $(selector, [startNode]) { [Command Line API] } 

Vs con jQuery incluido correctamente:

> $ 
function (e,n){return new x.fn.init(e,n,t)} 

así que .. sí, resulta que había un poco mal formados mi etiqueta de script - no es suficiente para causar cualquier error, y todavía fui a buscar el archivo de jQuery por lo la vista de red todavía mostraba que se estaba buscando, simplemente no estaba siendo yo interpretado como javascript, y como tal jQuery faltaba, pero todavía funcionaba la sintaxis suficiente que me lanzó por siglos.

Esperemos que esto le ahorre a alguien algún tiempo en algún momento.

+5

Incidentalmente, Chrome también tiene una función '$$' que devuelve una matriz de elementos que coinciden con el selector. Más información [aquí] (https://developer.chrome.com/devtools/docs/commandline-api#selector_1). – Jthorpe

+1

¡Dios mío ... muchas gracias! –

+1

@Jthorpe esto es absolutamente increíble, tal vez sea necesario hacer una pregunta sobre el cromo y respondiéndolo. Muchas gracias – Snowball

Cuestiones relacionadas