Encore une fois, j'ai hérité du système de quelqu'un d'autre qui est un peu en désordre. Je travaille actuellement avec une ancienne application de formulaires Web ASP.NET (VB) qui crache JavaScript sur le client via le serveur - pas sympa! Je suis également limité sur ce que je peux modifier en ce qui concerne l'application.

J'ai un scénario où j'ai une fonction qui fait un exercice simple mais aurait également besoin de savoir quel élément a été cliqué pour exécuter la fonction, car la fonction peut être exécutée à partir d'un certain nombre d'endroits dans le système ...

Disons que j'avais une fonction comme ça ...

 function updateMyDiv() {
    $('#div1').hide();
    $('#div2').hide();
    $('#div13').show();
 }

Comment pourrais-je obtenir l'ID (par exemple) de l'élément HTML sur lequel on a cliqué pour l'exécuter?

Quelque chose comme:

function updateMyDiv() {

    alert(htmlelement.id) // need to raise the ID of what was clicked, 

    $('#div1').hide();
    $('#div2').hide();
    $('#div13').show();
}

Je peux développer cela si nécessaire, dois-je passer this comme argument?

2
Mike Sav 27 oct. 2011 à 17:47

8 réponses

Meilleure réponse

Liez vos événements de clic avec jQuery, puis référencez $ (this)

$('.myDivClass').live('click', function () {
    updateMyDiv(this);
});

var updateMyDiv = function (that) {
   alert(that.id);

   // save the world
};
1
jbabey 27 oct. 2011 à 13:50

Où est votre gestionnaire d'événements .click? Où qu'elle soit, la variable this à l'intérieur sera l'élément cliqué.

Si vous avez un attribut onclick déclenchant votre fonction, changez-le en

<tag attribute="value" onclick="updateMyDiv(this)">

Et changez le JavaScript en

function updateMyDiv(obj) {
    alert(obj.getAttribute('id')) // need to raise the ID of what was clicked, 

    $('#div1').hide();
    $('#div2').hide();
    $('#div13').show();
}
0
Blazemonger 27 oct. 2011 à 13:52

Vous devrez lui passer la variable event.target.

$("element").click(function(event) {
    updateMyDiv($(event.target));
});

function updateMyDiv(target) {
    alert(target.prop("id"));
}
0
Alex Turpin 27 oct. 2011 à 13:51

Vous n'avez pas besoin de passer "this", il est attribué automatiquement. Vous pouvez faire quelque chose comme ça:

$('div').click(function(){
  alert($(this).attr('id'));
})
1
Ivan 27 oct. 2011 à 13:50

Utilisez la méthode .attr('id') et spécifiez l'id qui renverra ce dont vous avez besoin.

-1
chown 18 nov. 2011 à 01:28
$('.something').click(function(){
    alert($(this).attr('id'));
});
0
user1012851user1012851 27 oct. 2011 à 13:51

Le mot clé this fait référence à l'élément qui a déclenché l'événement. Soit:

<element onClick="doSomething(this);">

Ou

element.onclick = function() {
    alert(this.id);
}
3
Niet the Dark Absol 27 oct. 2011 à 13:49

Attachez la fonction car le gestionnaire d'événements des éléments est à sens unique,

$(htmlelement).click(updateMyDiv);

Si vous travaillez avec un événement déjà généré, vous pouvez appeler getElementByPoint et transmettre les événements x, y coords pour obtenir l'élément sur lequel la souris planait.

0
Andrew 27 oct. 2011 à 13:50