2010-05-10 4 views
14

J'ai une portée simple comme sidonnées à une fonction Passing cliquez sur jQuery()

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

Cette durée est dans une table, chaque ligne a une durée de supprimer.

Et puis j'appelle une URL en utilisant AJAX quand cet intervalle est cliqué. L'événement AJAX doit connaître l'ID de l'objet pour cette ligne? Quelle est la meilleure façon d'obtenir cette identification dans la fonction de clic?

Je pensais que je pouvais faire quelque chose comme ça

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

Mais un ID ne doit pas commencer par un chiffre? Droite? Ensuite, je pensais que je pouvais faire

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

bande alors que la partie « mon » de l'ID, mais tout semble Yuk!

Voici mon événement click et où se trouve mon événement AJAX.

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

$(document).ready(function() 
{ 

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

</script> 

Je suis sûr qu'il y a une bonne façon de faire cela?

Note: Je ne cherche pas

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

Je veux être en mesure de passer plus d'une information

Merci. Jake.

Répondre

14

Si vous insistez sur l'utilisation de old-school HTML 4.01 ou 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', ''); 
}); 

Par ailleurs, en HTML5, the id attribute can start with a number or even be a number.

Là encore, si vous utilisez HTML5 de toute façon, vous êtes probablement mieux d'utiliser des attributs de données personnalisés, comme ceci:

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

Ah, les attributs personnalisés sont OK? Je pensais qu'ils étaient W3C méchanceté? –

+2

@jakenoble: Pourquoi seraient-ils? Ils sont géniaux et très utiles dans les cas comme le vôtre: http://www.w3.org/TR/html5/dom.html#custom-data-attribute –

+0

C'est bon à savoir. Merci. Gros bravo. –

3

$ (this) au sein de votre fonction de clic représente l'élément cliquée

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

Merci Tim. Ce n'est pas ce que je cherche [éditera mon message]. –

+0

Pourquoi utiliser '$ (this) .attr ('id')' au lieu de 'this.id'? –

+0

Pour garder le jQuery-Way :-) Je le fais strictement pour éviter d'éventuels problèmes de navigateur x ... – Flatlin3

0

Vous pouvez essayer jQuery.data(): http://api.jquery.com/jQuery.data, mais cela signifierait le code généré côté serveur pour exécuter lorsque le chargement de la page de sorte que vous pouvez stocker les ids pour une réutilisation ultérieure (votre action remove)

// 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

Ceci est intéressant - * marques pour lecture plus tard * –

1

le code suivant vous obtenir l'ID de l'span cliqué. L'utilisation de l'ID n'est pas parfaite, mais cela fonctionnera.

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

Merci Glen. Ce n'est pas ce que je cherche [éditera mon message]. –

+0

Pourquoi utiliser '$ (this) .attr ('id')' au lieu de 'this.id'? –

+0

Je ne savais pas que 'this.id' était le même - * nice * –

1

Vous pourriez avoir un champ caché sur chaque ligne qui stocke l'ID et/ou d'autres données nécessaires dans un objet JSON & utilisent cela au lieu de pirater avec la balise 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

Merci. Pas pensé à ça. Un peu * chunky * je me sens et pas aussi élégant que les attributs personnalisés. –

+1

@jakenuble - Je suis d'accord avec le "gros" de la solution. La page peut ne pas valider pour xHTML avec des attributs personnalisés ... – Sunny

+1

@jakenoble - c'est un bon endroit pour voir quelques arguments pour/contre les attributs personnalisés: http://stackoverflow.com/questions/994856/so-what-if- custom-html-attributes-arent-valide-xhtml – Sunny