1091 Stimmen

Abrufen der ID des Elements, das ein Ereignis ausgelöst hat

Gibt es eine Möglichkeit, die ID des Elements zu erhalten, das ein Ereignis auslöst?

Ich denke da an etwas wie:

$(document).ready(function() {
  $("a").click(function() {
    var test = caller.id;
    alert(test.val());
  });
});

<script type="text/javascript" src="starterkit/jquery.js"></script>

<form class="item" id="aaa">
  <input class="title"></input>
</form>
<form class="item" id="bbb">
  <input class="title"></input>
</form>

Es sei denn natürlich, dass die var test sollte die id enthalten "aaa" wenn das Ereignis vom ersten Formular ausgelöst wird, und "bbb" wenn das Ereignis vom zweiten Formular ausgelöst wird.

26 Stimmen

Ihr Beispiel ist ein wenig merkwürdig. Sie sind ein Klick-Ereignis zu 'a' anhängen, aber haben keine Anker. Ändern Sie es zu $('input.title').click(...) wäre ein wenig klarer für zukünftige Leser Ihrer Frage sein.

3 Stimmen

Sie können verwenden event.target.id im Event-Handler, um die ID des Elements zu erhalten, das ein Ereignis ausgelöst hat.

0 Stimmen

Sie können event als Argument in Ihrer Click-Callback-Funktion und verwenden Sie dann event.target.id

1408voto

samjudson Punkte 54780

In jQuery event.target bezieht sich immer auf das Element, das das Ereignis ausgelöst hat, wobei event ist der Parameter, der an die Funktion übergeben wird. http://api.jquery.com/category/events/event-object/

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

Beachten Sie auch, dass this funktioniert auch, aber es ist kein jQuery-Objekt. Wenn Sie also eine jQuery-Funktion darauf anwenden wollen, müssen Sie sich auf das Objekt als $(this) , z.B.:

$(document).ready(function() {
    $("a").click(function(event) {
        // this.append wouldn't work
        $(this).append(" Clicked");
    });
});

13 Stimmen

Wow! Danke! Wusste nicht, dass jQuery das so gut abstrahiert. Sie rocken! Ich würde denken, es würde immer noch den Unterschied zwischen (this) und (event.target) - wobei Objekt, das Sie gebunden das Ereignis vs. das Objekt, das das Ereignis empfangen.

18 Stimmen

Leider erlaubt event.target keinen Zugriff auf seine benutzerdefinierten Attribute. Um das zu tun, muss man $(this).attr("organization:thingy"); verwenden.

17 Stimmen

@ZianChoy - Ich bin mir nicht ganz sicher, was Sie mit "benutzerdefinierten Attributen" meinen, aber Sie können $(event.target) wenn Sie eine jQuery-Methode benötigen, z. B., $(event.target).attr("organisation:thingy"); .

186voto

Gemma Punkte 1841

Probieren Sie dies als Referenz! Es funktioniert!

jQuery("classNameofDiv").click(function() {
    var contentPanelId = jQuery(this).attr("id");
    alert(contentPanelId);
});

16 Stimmen

@gemma Die andere Lösung hat bei mir nicht funktioniert, aber diese hier schon. Danke für die Verspätung.

3 Stimmen

@dlackey es ist das gleiche für mich, die andere Lösung funktionierte nicht auf meinem Firefox 12, aber diese tat. Danke

4 Stimmen

Die obere Antwort scheint nicht zu funktionieren, um die ID eines Elements in einem eingebetteten SVG zu erhalten. $(this).attr("id"); tut.

113voto

dsch Punkte 1101

Auch wenn dies bereits in anderen Beiträgen erwähnt wurde, wollte ich es noch einmal klarstellen:

$(event.target).id ist undefiniert

$(event.target)[0].id gibt das Attribut id an.

event.target.id gibt auch das Attribut id an.

this.id gibt das Attribut id an.

y

$(this).id ist undefiniert.

Der Unterschied liegt natürlich zwischen jQuery-Objekten und DOM-Objekten. "id" ist eine DOM-Eigenschaft, so dass Sie sich auf dem DOM-Elementobjekt befinden müssen, um sie zu verwenden.

(Ich bin darüber gestolpert, also ist wahrscheinlich auch jemand anderes darüber gestolpert)

1 Stimmen

Zu mir, event.target.id gibt nichts!

3 Stimmen

@artaxerxe dies bedeutet, dass Ihr angeklickten Element keine id hat: P; auch verwenden Sie nicht jquery für diese Art von Dingen.... verwenden Sie Ereignis-Javascript-Attribute stattdessen, weil es schneller ist.

2 Stimmen

$(event.target).attr('selector'); hat bei mir perfekt funktioniert.

108voto

Ally Punkte 4536

Für alle Ereignisse, nicht nur für jQuery, können Sie verwenden

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

Wo event.target scheitert, greift es zurück auf event.srcElement für IE. Um zu klären, der obige Code erfordert nicht jQuery, sondern funktioniert auch mit jQuery.

15 Stimmen

Ohne jQuery werden weniger Codezeilen ausgeführt, während das gleiche Ergebnis erzielt wird, wie oben gezeigt. jQuery abstrahiert js. Dies ist die direkte js-Antwort, und schauen Sie sich die Größe!

1 Stimmen

Ist es nicht besser, nur 'this' Schlüsselwort, die immer wird Ihnen Zugriff auf Eigenschaften des Elements, das das Ereignis aufgerufen?

9 Stimmen

Musste nur durch die ganze jQuery Mist zu graben, um diese Antwort zu bekommen. Danke. Dies ist mehr denn je relevant: needsmorejquery.com

59voto

Espo Punkte 40386

Sie können verwenden (this) um auf das Objekt zu verweisen, das die Funktion ausgelöst hat.

'this' es un DOM Element, wenn Sie sich innerhalb einer Callback-Funktion (im Kontext von jQuery) befinden, z. B. durch die Methoden click, each, bind usw. aufgerufen werden.

Hier können Sie mehr erfahren: http://remysharp.com/2007/04/12/jquerys-this-demystified/

4 Stimmen

Wenn Sie eine Funktion wie $(html).click() (this) liefert das html-Objekt und nicht das angeklickte Element

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X