2016-06-19 9 views
1

Ich versuche, die Ereignisanzeige zu verwenden, um zu bestimmen, welche Vorlage in meiner Anweisung verwendet wird. Das Problem ist, ich kann nicht herausfinden, wie man das Button-Element, an das das Click-Event gebunden ist, bekommt. Das Ereignisziel kann abhängig davon variieren, wo sich die Maus befindet, wenn der Benutzer klickt. Es kann entweder die Spanne oder das Button-Tag sein. Was ist der beste Weg, um das Button-Element zu erhalten, ob das Ziel die Spanne oder der Button ist, ohne alle Arten von verrückten bedingten Codes?Element mit Click-Ereignis erhalten

Auch ich kann die Direktive nicht anpassen, weil ich Angular Material verwende und ich kann jQuery nicht verwenden.

HTML:

<button ng-click="main.authDialog($event)"> 
    <span class="ng-scope">Sign Up</span> 
    <div class="md-ripple-container"></div> 
</button> 
+1

Ein * runnable * [MCVE] in der Frage mit Stack Snippets (der '<>' Symbolleistenschaltfläche) erleichtert es Ihnen, nützliche Antworten zu erhalten. –

+0

** [Diese Antwort] (http://stackoverflow.com/a/12431211/3639582) ** könnte helfen. Sie können auf das Element über '$ event.target' in der' authDialog() 'Definition zugreifen. –

+0

Warum nicht angefügte EventListener verwenden eine kurze for-Schleife zu allen Elementen, die Sie interessieren und wann immer ein Element geklickt wird, gibt der Handler das Ziel zurück? Ist das, woran Sie interessiert sind? – repzero

Antwort

2

event.currentTarget sagt Ihnen, das Element, an dem das Ereignis süchtig war, eher als die auf dem er ausgelöst wurde (event.target).

Beispiel:

var myApp = angular.module('exModule', []); 
 
myApp.controller('exController', function($scope) { 
 
    $scope.main = { 
 
    authDialog(e) { 
 
     console.log("target", e.target); 
 
     console.log("currentTarget", e.currentTarget); 
 
    } 
 
    }; 
 
});
<div ng-app="exModule" ng-controller="exController"> 
 
    <button ng-click="main.authDialog($event)"> 
 
    <span class="ng-scope">Sign Up</span> 
 
    <div class="md-ripple-container"></div> 
 
    </button> 
 
</div> 
 
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>


Randbemerkung: Das HTML ungültig ist, kann button elements nicht div elements enthalten.

+0

Danke. In Bezug auf das ungültige HTML ist dies die Art und Weise, wie Angular Material es nach der Einfügung tut. Schätze, dort gibt es nicht viel zu tun. – Aaron

+0

@Aaron: Klingt wie eine versaute Vorlage. Ich bin mir ziemlich sicher, dass Angular kein ungültiges HTML für Leute erzwingt. –

+0

So ist die Schaltfläche Richtlinie lautet wie folgt: Anmelden das Hinzufügen Die Klasse md-raise scheint die Anweisung div hinzuzufügen. Ich kann keinen Weg aus der Dokumentation zu sehen, um das zu ändern: https://material.angularjs.org/latest/api/directive/mdButton – Aaron

Verwandte Themen