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

8voto

Basant Rules Punkte 655

Verwenden Sie können Verwenden Sie .on event

  $("table").on("tr", "click", function() {
                    var id=$(this).attr('id');
                    alert("ID:"+id);  
                });

7voto

Isochronous Punkte 1036

Im Fall von delegierten Ereignishandlern, wo Sie etwas wie dieses haben könnten:

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

und Ihren JS-Code wie folgt:

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

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

Sie werden höchstwahrscheinlich feststellen, dass itemId undefined da der Inhalt des LI in eine Hülle aus <span> was bedeutet, dass die <span> wird wahrscheinlich das Ziel der Veranstaltung sein. Sie können dies mit einer kleinen Prüfung umgehen, etwa so:

$(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
    });
});

Oder, wenn Sie es vorziehen, die Lesbarkeit zu maximieren (und auch unnötige Wiederholungen von jQuery-Wrapping-Aufrufen zu vermeiden):

$(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
    });
});

Wenn Sie die Ereignisdelegation verwenden, wird die .is() Methode ist von unschätzbarem Wert, wenn es darum geht, zu überprüfen, ob Ihr Ereignisziel (neben anderen Dingen) tatsächlich das ist, was Sie brauchen. Verwenden Sie .closest(selector) um im DOM-Baum nach oben zu suchen, und verwenden Sie .find(selector) (in der Regel gekoppelt mit .first() wie in .find(selector).first() ), um es zu durchsuchen. Sie brauchen nicht zu verwenden .first() bei Verwendung von .closest() da es nur das erste übereinstimmende Vorgängerelement zurückgibt, während .find() gibt alle passenden Nachfahren zurück.

1 Stimmen

Nützlich! Ich habe es in meinem Fall angepasst, weil ich nur ein einfaches <li id="numberID"> hatte und daher itemId = $target.attr('id') verwendet hatte.

0 Stimmen

Seien Sie nur vorsichtig bei der Verwendung eines einfachen ID-Attributs, da jede ID auf dieser Seite eindeutig sein muss. Wenn Sie also aus irgendeinem Grund zwei solche Listen auf dieser Seite haben müssen, werden Sie wahrscheinlich mit doppelten IDs enden, was eine schlechte Sache ist. Deshalb neige ich dazu, immer data-id zu verwenden, um für die Zukunft gerüstet zu sein.

5voto

chings228 Punkte 1829
$(".classobj").click(function(e){
    console.log(e.currentTarget.id);
})

0 Stimmen

@ManuelMannhardt es gibt keinen Link in dieser Antwort, es ist eine reine Code-Antwort, nicht eine reine Link-Antwort

5voto

Marcel Verwey Punkte 431

Dies funktioniert auf einer höheren z-index als die in den obigen Antworten genannten Ereignisparameter:

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

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

Auf diese Weise erhalten Sie immer die id der (in diesem Beispiel li ) Element. Auch wenn auf ein untergeordnetes Element des übergeordneten Elements geklickt wird

4voto

shmuli Punkte 4826
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);
}

JSFiddle arbeiten aquí .

0 Stimmen

Ich denke, dies ist eine veraltete Option, damit es funktioniert

2 Stimmen

@ArnasPecelis veraltet? nein, nur nicht jQuery.

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