2009-07-02 22 views
9

He estado tratando de averiguar por qué las siguientes líneas de código no funcionan:jQuery: Pasar variables a: eq() no funciona

$('#add-cloud > select').change(function() { 
    var selected = parseInt($('#add-cloud select option:selected').val()); 
    $("#cloud-calculator table tr:eq(selected)").css("color", "red"); 
}); 

Si cambio :eq(selected) a :eq(4) por ejemplo - funciona bien . ¿Cómo se pasa variable como argumento al :eq()?

Respuesta

27

Tienes que concatenar la variable con su selector:

$("tr:eq("+selected+")"); 
+3

El código es correcto, pero la descripción de lo que está sucediendo es muy incorrecta. – chaos

+0

¡Gracias! Lo intenté con comillas simples antes y no funcionó. Supongo que no estaba prestando atención a las comillas dobles. – dalizard

+1

Correcto, las comillas simples no funcionaron porque lo que está haciendo no es 'escapar' nada, es terminar la primera cadena "tr: ​​eq (", agregar la variable seleccionada y luego agregar otra cadena ")". – chaos

3

La forma en que lo está haciendo, que está incrustando la cadena real "selected" en el selector. Es necesario construir una cadena utilizando la variable de selected como una parte de ella:

$("#cloud-calculator table tr:eq(" + selected + ")").css("color", "red"); 
1

Además, puede simplemente usar el 'este' objeto de obtener el valor seleted.

$('#add-cloud > select').change(function() 
{ 
    var rowSelector = '#cloud-calculator table tr:eq(' + parseInt(this.val()) + ')'; 
    $(rowSelector).css("color", "red"); 
} 
0

Sí podemos pasar la variable a eq() function. Pero necesita desactivar Firebug. De lo contrario, no funcionará.

Por favor, consulte este ejemplo.

var index = 3  
$('#sidebar_menu li:eq('+index+')').css({"color":"#050959"});