Obtenir L'ID de l'élément qui a déclenché un événement

Est-il possible d'obtenir l'ID de l'élément qui déclenche un événement?

je pense à quelque chose comme:

<html>
  <head>
    <script type="text/javascript" src="starterkit/jquery.js"></script>
    <script type="text/javascript">
      $(document).ready(function () {
        $("a").click(function () {
          var test = caller.id;
          alert(test.val());
        });
      });
    </script>
  </head>
  <body>
    <form class="item" id="aaa">
      <input class="title"></input>
    </form>
    <form class="item" id="bbb">
      <input class="title"></input>
    </form>
  </body>

</html>

sauf bien sûr que la var test doit contenir l'id "aaa" , si l'événement est tiré à partir de la première forme, et "bbb" , si l'événement est tiré à partir de la deuxième forme.

847
demandé sur Alive to Die 2008-09-07 12:09:38

17 réponses

dans jQuery event.target se réfère toujours à l'élément qui a déclenché l'événement, où 'event' est le paramètre passé à la fonction. http://api.jquery.com/category/events/event-object /

$(document).ready(function() {
    $("a").click(function(event) {
        alert(event.target.id);
    });
});

Notez aussi que 'this' fonctionnera aussi, mais qu'il ne s'agit pas d'un objet jQuery, donc si vous souhaitez utiliser une fonction jQuery dessus, vous devez l'appeler '$(this)' , par exemple:

$(document).ready(function() {
    $("a").click(function(event) {
        // this.append wouldn't work
        $(this).append(" Clicked");
    });
});
1152
répondu samjudson 2014-07-11 08:15:43

pour référence, essayez ceci! Il fonctionne!

jQuery("classNameofDiv").click(function() {
    var contentPanelId = jQuery(this).attr("id");
    alert(contentPanelId);
});
148
répondu Gemma 2012-07-02 03:03:24

bien qu'il soit mentionné dans d'autres Billets, je voulais préciser ceci:

$(event.target).id n'est pas défini

$(event.target)[0].id donne l'attribut id.

event.target.id donne aussi l'attribut id.

this.id donne l'attribut id.

et

$(this).id n'est pas défini.

Les différences, bien sûr, est entre jQuery objets et objets DOM. "id" est une propriété DOM donc vous devez être sur L'objet DOM element pour l'utiliser.

(Il a trébuché moi, il est donc probablement trébucher quelqu'un d'autre)

80
répondu dsch 2018-05-09 15:45:10

Pour tous les événements, pas seulement jQuery vous pouvez utiliser

var target = event.target || event.srcElement;
var id = target.id

event.target échoue il retombe sur event.srcElement pour IE. Pour clarifier le code ci-dessus ne nécessite pas jQuery mais fonctionne également avec jQuery.

73
répondu Ally 2016-02-08 15:12:33

Vous pouvez utiliser (this) pour faire référence à l'objet qui a déclenché la fonction.

'this' est un élément DOM lorsque vous êtes à l'intérieur d'une fonction de rappel (dans le contexte de jQuery), par exemple, étant appelé par le clic, chaque, bind, etc. méthode.

pour en savoir plus: http://remysharp.com/2007/04/12/jquerys-this-demystified/

59
répondu Espo 2013-08-30 08:19:37

je génère une table dynamiquement sur une base de données, recevoir les données dans JSON et de le mettre dans une table. Chaque rang de table a obtenu un unique ID , qui est nécessaire pour les actions futures, donc, si le DOM est modifié, vous avez besoin d'une approche différente:

$("table").delegate("tr", "click", function() {
   var id=$(this).attr('id');
   alert("ID:"+id);  
});
25
répondu SMut 2016-02-08 15:13:00

l'Élément qui fait feu de l'événement que nous avons dans la événement propriété

event.currentTarget

Nous avons nœud DOM objet sur lequel a été fixé un gestionnaire d'événement.


noeud le plus imbriqué qui a commencé le processus de barbotage que nous avons dans

event.target

objet Événement est toujours le premier attribut de gestionnaire d'événements, par exemple:

document.querySelector("someSelector").addEventListener(function(event){

 console.log(event.target);
 console.log(event.currentTarget);

});

plus d'informations à propos de event delegation vous pouvez lire dans http://maciejsikora.com/standard-events-vs-event-delegation /

16
répondu Maciej Sikora 2016-10-14 13:04:43

l'élément source en tant qu'objet jQuery doit être obtenu par

var $el = $(event.target);

cela vous donne la source du clic, plutôt que l'élément que la fonction de clic a été assignée aussi. Peut être utile lorsque l'événement de clic est sur un objet parent Par exemple.un événement de clic sur une rangée de table, et vous avez besoin de la cellule qui a été cliqué

$("tr").click(function(event){
    var $td = $(event.target);
});
10
répondu Morvael 2014-12-15 13:51:53

Vous pouvez essayer d'utiliser:

$('*').live('click', function() {
 console.log(this.id);
 return false;
});
7
répondu Darius 2012-11-03 17:40:44

dans le cas des gestionnaires d'événements délégués, où vous pourriez avoir quelque chose comme ceci:

<ul>
    <li data-id="1">
        <span>Item 1</span>
    </li>
    <li data-id="2">
        <span>Item 2</span>
    </li>
    <li data-id="3">
        <span>Item 3</span>
    </li>
    <li data-id="4">
        <span>Item 4</span>
    </li>
    <li data-id="5">
        <span>Item 5</span>
    </li>
</ul>

et votre code JS comme ceci:

$(document).ready(function() {
    $('ul').on('click li', function(event) {
        var $target = $(event.target),
            itemId = $target.data('id');

        //do something with itemId
    });
});

vous trouverez plus que probable que itemId est undefined , car le contenu du LI est enveloppé dans un <span> , ce qui signifie que le <span> sera probablement la cible de l'événement. Vous pouvez contourner cela avec un petit chèque, comme cela:

$(document).ready(function() {
    $('ul').on('click li', function(event) {
        var $target = $(event.target).is('li') ? $(event.target) : $(event.target).closest('li'),
            itemId = $target.data('id');

        //do something with itemId
    });
});

ou, si vous préférez maximiser la lisibilité (et aussi éviter la répétition inutile d'appels d'emballage jQuery):

$(document).ready(function() {
    $('ul').on('click li', function(event) {
        var $target = $(event.target),
            itemId;

        $target = $target.is('li') ? $target : $target.closest('li');
        itemId = $target.data('id');

        //do something with itemId
    });
});

lors de l'utilisation de la délégation d'événement, la méthode .is() est inestimable pour vérifier que votre cible d'événement (entre autres choses) est réellement ce que vous avez besoin qu'il soit. Utilisez .closest(selector) pour rechercher L'arbre DOM, et utilisez .find(selector) (généralement couplé avec .first() , comme dans .find(selector).first() ) pour chercher en bas. Vous n'avez pas besoin d'utiliser .first() quand en utilisant .closest() , comme il renvoie seulement le premier élément ancêtre correspondant, tandis que .find() renvoie tous les descendants correspondants.

5
répondu Isochronous 2015-06-18 20:41:42

utiliser peut utiliser .sur l'événement

  $("table").on("tr", "click", function() {
                    var id=$(this).attr('id');
                    alert("ID:"+id);  
                });
5
répondu Basant Rules 2016-09-24 06:55:19
var buttons = document.getElementsByTagName('button');
var buttonsLength = buttons.length;
for (var i = 0; i < buttonsLength; i++){
    buttons[i].addEventListener('click', clickResponse, false);
};
function clickResponse(){
    // do something based on button selection here...
    alert(this.id);
}

Travail JSFiddle ici .

4
répondu shmuli 2016-01-26 20:28:12

cela fonctionne sur un plus haut z-index que le paramètre d'événement mentionné dans les réponses ci-dessus:

$("#mydiv li").click(function(){

    ClickedElement = this.id;
    alert(ClickedElement);
});

de cette façon, vous obtiendrez toujours id de l'élément (dans cet exemple li ). Aussi lorsque cliqué sur un élément enfant du parent..

4
répondu Marcel Verwey 2016-02-08 15:11:30

this.element.attr("id") fonctionne très bien avec IE8.

3
répondu Gilly 2016-06-13 11:11:02

ces deux travaux,

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

et

alert(this.id);
2
répondu Moji 2014-05-23 11:44:10

il suffit D'utiliser la this référence

$(this).attr("id")

ou

$(this).prop("id")
2
répondu Error404 2016-08-04 08:51:05

Vous pouvez utiliser la fonction pour obtenir l'id et la valeur de l'élément modifié(dans mon exemple, j'ai utilisé une balise Select.

              $('select').change(
                   function() {
                        var val = this.value;
                        var id = jQuery(this).attr("id");
                        console.log("value changed" + String(val)+String(id));
                   }
               );
0
répondu xeon 2018-02-05 11:23:13