2016-06-19 8 views
1

私の指示文でどのテンプレートを使用するかを決定するためにイベントデリゲートを使用しようとしています。問題は、クリックイベントがバインドされているボタン要素を取得する方法を理解できないことです。イベントターゲットは、ユーザーがクリックしたときのマウスの位置によって異なります。スパンまたはボタンタグのいずれかになります。あらゆる種類の狂った条件付きコードがないターゲットがスパンかボタンかどうか、ボタン要素を取得する最善の方法は何ですか?Clickイベントを含む要素を取得する

また、アングル材を使用していてjQueryを使用できないため、ディレクティブをカスタマイズできません。

HTML:

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

スタックスニペット( '<>'ツールバーボタン)を使用した質問で、* runnable * [MCVE]を使用すると、便利な回答を簡単に得ることができます。 –

+0

** [この回答](http://stackoverflow.com/a/12431211/3639582)**役立つ可能性があります。 'authDialog()'定義の '$ event.target'で要素にアクセスすることができます。 –

+0

あなたが関心のあるすべての要素に短いforループを使用し、要素がクリックされるたびに、ハンドラがターゲットを返しますか?なぜあなたが興味を持っているのですか? – repzero

答えて

2

event.currentTargetはあなたのイベントがフックされた要素ではなく、それがトリガーされた1(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>


サイドノート:HTMLが無効であることを、button elementsdiv elementsを含めることはできません。

+0

ありがとうございます。無効なHTMLに関しては、これは、角度材料が切り取った後の方法です。そこにはあまり行かないと思う。 – Aaron

+0

@Aaron:うんざりしたテンプレートのように聞こえます。 Angularは人々に無効なHTMLを強制していないと私は確信しています。 –

+0

次のようにボタンディレクティブは、次のとおりです。 を追加 サインアップクラスmd-raisedはディレクティブにdivを追加するように見えます。ドキュメントからそれを変更する方法はありません。 https://material.angularjs.org/latest/api/directive/mdButton – Aaron

関連する問題