2016-06-19 3 views
1

Я пытаюсь использовать дегультизацию событий, чтобы определить, какой шаблон будет использоваться в моей директиве. Проблема в том, что я не могу понять, как получить элемент кнопки, где связано событие click. Цель события может варьироваться в зависимости от того, где мышь, когда пользователь нажимает. Это может быть либо диапазон, либо тег кнопки. Каков наилучший способ получить элемент кнопки, является ли цель интервалом или кнопкой без всякого сумасшедшего условного кода?Получить элемент, содержащий событие Click

Также я не могу настроить директиву, потому что я использую угловой материал, и я не могу использовать jQuery.

HTML:

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

A * runnable * [MCVE] в вопросе, используя Stack Snippets (кнопка панели инструментов <<'), облегчает вам получение полезных ответов. –

+0

** [Этот ответ] (http://stackoverflow.com/a/12431211/3639582) ** может помочь. Вы можете получить доступ к элементу '$ event.target' в определении' authDialog() '. –

+0

Почему не присоединяемые eventlisteners, использующие короткий цикл для всех интересующих вас элементов и всякий раз, когда элемент щелкнет, обработчик вернет цель?. Это то, что вас интересует? – repzero

ответ

2

event.currentTarget говорит вам элемент, на котором событие зацепила, а не тот, на котором она была вызвана (event.target).

Пример:

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>


Side Примечание: Это HTML является недействительным, button elements не может содержать div elements.

+0

Спасибо. Что касается недействительного HTML, то это способ, которым угловой материал делает это после выключения. Думаю, там не так много сделано. – Aaron

+0

@ Аарон: Звучит как испорченный шаблон. Я совершенно уверен, что Angular не приводит к неверному HTML для людей. –

+0

Так директива кнопки выглядит следующим образом: <мкр-кнопка класса = «мкр-первичный мкр-рейз регистрация» нг-клик = «main.authDialog ($ событие)»> Регистрация Добавления class md-raise, похоже, делает директиву добавлением div. Я не вижу никакого способа из документации, чтобы изменить это: https://material.angularjs.org/latest/api/directive/mdButton – Aaron

Смежные вопросы