2010-05-10 7 views
14

que tienen una vida sencilla al igual quedatos que pasan a una función jQuery click()

<span class="action removeAction">Remove</span> 

Este lapso es dentro de una tabla, cada fila tiene un período de eliminación.

Y luego llamo a una URL usando AJAX cuando se hace clic en ese tramo. El evento AJAX necesita saber el ID del objeto para esa fila? ¿Cuál es la mejor manera de obtener esa identificación en la función de clic?

pensé que podía hacer algo como esto

<span class="action removeAction" id="1">Remove</span> 

Pero un ID no debe comenzar con un número? ¿Derecha? Entonces pensé que podría hacer

<span class="action removeAction" id="my1">Remove</span> 

Luego, simplemente quita la parte 'mi' de la ID, ¡pero eso solo parece ser Yuk!

A continuación, se muestra mi evento de clic y mi evento AJAX.

<script type="text/javascript" language="text/javascript"> 

$(document).ready(function() 
{ 

    $(".removeAction").click(function() 
    { 
     //AJAX here that needs to know the ID    
    } 
}); 

</script> 

Estoy seguro de que hay una buena manera de hacerlo?

Nota: No estoy buscando

$(this).attr("id"); 

Quiero ser capaz de pasar más de una pieza de información

Gracias. Jake.

Respuesta

14

Si usted insiste en el uso de HTML de la vieja escuela 4.01 o XHTML:

$('.removeAction').click(function() { 
// Don’t do anything crazy like `$(this).attr('id')`. 
// You can get the `id` attribute value by simply accessing the property: 
this.id; 
// If you’re prefixing it with 'my' to validate as HTML 4.01, you can get just the ID like this: 
this.id.replace('my', ''); 
}); 

Por cierto, en HTML5, the id attribute can start with a number or even be a number.

Por otra parte, si usted está utilizando HTML5 todos modos, es probable que mejor usar atributos de datos personalizados, así:

<span class="action removeAction" data-id="1">Remove</span> 
+0

Ah, ¿los atributos personalizados están bien? Pensé que eran maldad W3C? –

+2

@jakenoble: ¿Por qué serían? Son increíbles y muy útiles en casos como el tuyo: http://www.w3.org/TR/html5/dom.html#custom-data-attribute –

+0

Esto es bueno saberlo. Gracias. Gran pulgar hacia arriba –

3

$ (this) dentro de su función de clic representa el elemento se ha hecho clic

$(".removeAction").click(function() { 
    //AJAX here that needs to know the ID 
    alert($(this).attr('id'));   
} 
+0

Gracias Tim. Esto no es lo que estoy buscando [editaré mi publicación]. –

+0

¿Por qué usar '$ (this) .attr ('id')' en lugar de 'this.id'? –

+0

Para mantener el jQuery-Way :-) Hago esto estrictamente para evitar posibles problemas con el navegador X ... – Flatlin3

0

Usted podría intentar jQuery.data(): http://api.jquery.com/jQuery.data, pero eso significaría código generado en el servidor JS a ejecutar cuando se carga la página para que pueda almacenar los identificadores para su posterior reutilización (su acción de eliminación)

// this part would have to be server 'generated' 
// and by that I'm referring to the '<?=$row_id?>' 
$('table .remove').each(function(){ 

    var MyElem = $(this); 
    MyElem.data('id', <?=$row_id?>); 

    MyElem.click(function(){ 
     the_id = $(this).data('id'); 
     // ajax call goes here 
    }); 

}); 
+0

Esto es interesante - * marcas para lecturas posteriores * –

1

el siguiente código le conseguirá el ID de la span se hace clic. Usar la ID no es perfecto, pero funcionará.

$(".removeAction").click(function() { 
    alert($(this).attr("id")); 
}); 
+0

Gracias Glen. Esto no es lo que estoy buscando [editaré mi publicación]. –

+0

¿Por qué usar '$ (this) .attr ('id')' en lugar de 'this.id'? –

+0

No sabía que 'this.id' era el mismo - * nice * –

1

usted podría tener un campo oculto en cada fila que almacena el ID y/u otros datos necesarios en un objeto JSON & usan eso en lugar de piratear con la etiqueta span.

<tr> 
<td> 
<span class="action removeAction">Remove</span> 
<input type="hidden" value="1" /> 
</td> 
</tr> 

$('.removeAction').click(function(){ 
    var id = $(this).next().val(); 
    // do something... 
}); 

HTH

+0

Gracias. No pensé en eso. Algo * grueso * Me siento y no tan elegante como los atributos personalizados. –

+1

@jakenuble - Estoy de acuerdo con la "fragilidad" de la solución. Es posible que la página no valide para xHTML con atributos personalizados ... – Sunny

+1

@jakenoble: este es un buen lugar para ver algunos argumentos a favor/en contra de los atributos personalizados: http://stackoverflow.com/questions/994856/so-what-if- custom-html-attributes-arent-valid-xhtml – Sunny

Cuestiones relacionadas