Holen Sie sich das Originalelement von ng-click


204

Ich habe eine Liste von Elementen in meiner Ansicht mit ng-clickangehängten Elementen :

<ul id="team-filters">
    <li ng-click="foo($event, team)" ng-repeat="team in teams">
         <img src="{{team.logoSmall}}" alt="{{team.name}}" title="{{team.name}}">
    </li>
</ul>

Ich verarbeite die Klickereignisse in der fooFunktion in meiner Direktive und übergebe sie $eventals Verweis auf das Objekt, auf das geklickt wurde. Ich erhalte jedoch einen Verweis auf das imgTag und nicht auf das liTag. Ich muss dann solche Sachen machen, um das zu bekommen li:

$scope.foo = function($event, team) {
   var el = (function(){
       if ($event.target.nodeName === 'IMG') {
          return angular.element($event.target).parent(); // get li
       } else {
          return angular.element($event.target);          // is li
       }
   })();

Gibt es eine einfache Möglichkeit, den Verweis auf das ng-clickgebundene Element abzurufen, ohne DOM-Operationen in meiner Direktive auszuführen?

Antworten:


317

Sie brauchen $event.currentTargetstatt $event.target.


3
Danke, es funktioniert. Es ist seltsam, dass die Eigenschaft currentTarget im $ event-Objekt auf null gesetzt ist.
Ozrix

2
Dies ist definitiv seltsam ... Wenn Sie das $ event-Objekt protokollieren, scheint $ event.currentTarget null zu sein. Wenn Sie jedoch die Referenz $ event.currentTarget protokollieren, wird das richtige Element angezeigt.
Richardaday

6
Ich werde normalerweise verwenden var elem = $event.currentTarget || $event.srcElement. Es war schon immer Cross-Browse-freundlich, aber ich weiß nicht, ob es noch nötig ist.
WebWanderer

12
console.log zeigt tief veränderbare Objekte im letzten Ausführungsstatus an, nicht in dem Zustand, in dem console.log aufgerufen wurde. siehe stackoverflow.com/questions/22059811/…
Tivie

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.