Angular2はクリックされた要素IDを取得します


88

そんなクリックイベントがあります

 <button (click)="toggle($event)" class="someclass" id="btn1"></button>
 <button (click)="toggle($event)" class="someclass" id="btn2"></button>

関数の入力パラメーターでイベントをキャッチしていて、ボタンが正確にクリックされたことを確認したいと思います。

toggle(event) {

}

ただしeventidプロパティはありません。

altKey: false
bubbles: true
button: 0
buttons: 0
cancelBubble: false
cancelable: true
clientX: 1198
clientY: 29
ctrlKey: false
currentTarget: button#hdrbtn_notificaton.mdl-button.mdl-js-button.mdl-js-ripple-effect.mdl-button--icon
defaultPrevented: false
detail: 1
eventPhase: 3
fromElement: null
isTrusted: true
isTrusted: true
layerX: -566
layerY: 5
metaKey: false
movementX: 0
movementY: 0
offsetX: 22
offsetY: 13
pageX: 1198
pageY: 29
path: Array[13]
relatedTarget: null
returnValue: true
screenX: 1797
screenY: 148
shiftKey: false
sourceCapabilities: InputDeviceCapabilities
srcElement: span.mdl-button__ripple-container
target: span.mdl-button__ripple-container
timeStamp: 1458032708743
toElement: span.mdl-button__ripple-container
type: "click"
view: Window
webkitMovementX: 0
webkitMovementY: 0
which: 1
x: 1198
y: 29

どうすれば見つけることができますidか?

更新: プランカーはすべて良いですが、私の場合はローカルにあります:

event.srcElement.attributes.id-未定義 event.currentTarget.id-値があります

Chromeの最新バージョン49.0.2623.87mを使用しています

それはMaterial Design Lite事でしょうか?使っているから。

ここに画像の説明を入力してください


あなたは何をしたいidですか?
Pardeep Jain 2016

同じクリック機能を実行する2つのボタンがあります。だから私はどれがクリックされたかを見つける必要があります
sreginogemoh 2016年

単にidperametersと一緒に静的/動的を渡します。
Pardeep Jain 2016

なぜ入手するのがとても難しいのidですか?
sreginogemoh 2016年

1
ちょうどそれを見つけましたevent.currentTarget.id
sreginogemoh 2016年

回答:


144

idボタンの属性にアクセスしたい場合srcElementは、イベントのプロパティを活用できます。

import {Component} from 'angular2/core';

@Component({
  selector: 'my-app',
  template: `
    <button (click)="onClick($event)" id="test">Click</button>
  `
})
export class AppComponent {
  onClick(event) {
    var target = event.target || event.srcElement || event.currentTarget;
    var idAttr = target.attributes.id;
    var value = idAttr.nodeValue;
  }
}

このプランカーを参照してください:https://plnkr.co/edit/QGdou4?p = preview 。

この質問を参照してください:


1
event.srcElement.attributes.idなぜ分からない未定義...しかし、私が発見されたid中でevent.currentTarget.id
sreginogemoh

本当に?私のプランカーを見ましたか?それは私が使用しているものであり、未定義ではありません...私の場合(Chrome)currentTargetは未定義です:-(どのブラウザを使用していますか?
Thierry Templier

実際、それはsrcElementか、ブラウザに応じたターゲットのいずれかです。この質問を参照してください:stackoverflow.com/questions/5301643/...
ティエリーTEMPLIER

4
Chrome:angular2.dev.js:23597 TypeError: Cannot read property 'nodeValue' of undefined
sreginogemoh 2016年

4
私はこれを使うことになりますvar target = event.srcElement.attributes.id || event.currentTarget.id;
sreginogemoh 2016年

37

TypeScriptユーザーの場合:

    toggle(event: Event): void {
        let elementId: string = (event.target as Element).id;
        // do something with the id... 
    }

5
これは私の意見では受け入れられた答えであるはずです。しかし、それは可能ですconst elementId: string = (event.target as Element).id;
Harish

1
それは私にとって空白を返します。ないnullまたはundefinedが、空白
ダレン・ストリート

ありがとう。コンソールにすべて表示されているのに、targetまたはsrcTargetのプロパティを直接確認できない理由がわかりませんでした。要素としてキャストします。
ジェレミー

これは間違いなく一番の答えになるはずです。
NobodySomewhere

19

最後に最も簡単な方法を見つけました:

<button (click)="toggle($event)" class="someclass" id="btn1"></button>
<button (click)="toggle($event)" class="someclass" id="btn2"></button>

toggle(event) {
   console.log(event.target.id); 
}

これは注意が必要かもしれません。ボタンにHTMLコンテンツが含まれている場合、たとえば、<button ...><i class="fa fa-check"></i></button>実際にそれをクリックします。iFontAwasomeの成分である、要素、そしてevent.targetではありませんbuttonが、i要素。
SkorunkaFrantišek

2
button要素を取得するには、を使用しますevent.target.closest('button')
SkorunkaFrantišek

19

静的な値(またはからの変数*ngForなど)を渡すことができます

<button (click)="toggle(1)" class="someclass">
<button (click)="toggle(2)" class="someclass">

idそのような場合は使用を避ける方が良いと思いますか?
sreginogemoh 2016年

1
唯一の目的がイベントパラメータとして渡すことである場合、IDは使用しません。
ギュンターZöchbauer

1
使用する代わりにid、配列などからインデックスを選択します。最も単純なソリューションを頻繁に見落としているのは驚くべきことです。
百合

9

イベント全体を渡す必要はありません(指定した以外のイベントの側面が必要な場合を除く)。実際、お勧めしません。少し変更するだけで要素参照を渡すことができます。

import {Component} from 'angular2/core';

@Component({
  selector: 'my-app',
  template: `
    <button #btn1 (click)="toggle(btn1)" class="someclass" id="btn1">Button 1</button>
    <button #btn2 (click)="toggle(btn2)" class="someclass" id="btn2">Button 2</button>
  `
})
export class AppComponent {
  buttonValue: string;

  toggle(button) {
    this.buttonValue = button.id;
  }

}

StackBlitzデモ

技術的には、実際の要素を渡したので、クリックされたボタンを見つける必要はありません。

角度ガイダンス


これは、@ GregのAngularガイダンスへのリンクで参照されている正解です。
Chrizzldi

4

あなたは、ときにHTMLElement持っていないidnameまたはclass呼び出すために、

次に使用します

<input type="text" (click)="selectedInput($event)">

selectedInput(event: MouseEvent) {
   log(event.srcElement) // HTMInputLElement
}

2

単純にこれを好きにしてください:(ここのコメントで述べられているように、2つの方法の例があります)

import {Component} from 'angular2/core';

@Component({
    selector: 'my-app', 
    template: `
      <button (click)="checkEvent($event,'a')" id="abc" class="def">Display Toastr</button>
      <button (click)="checkEvent($event,'b')" id="abc1" class="def1">Display Toastr1</button>
    `
})
export class AppComponent {
  checkEvent(event, id){
    console.log(event, id, event.srcElement.attributes.id);
  }
}

デモ:http//plnkr.co/edit/5kJaj9D13srJxmod213r?p = Preview


4
event.srcElement.attributes.id私の場合は未定義です理由はわかりません...しかし、私はidinevent.currentTarget.id
sreginogemoh 2016年

eventあなたが見ることができる解雇されたオブジェクトでチェックアウトするだけですid
Pardeep Jain 2016

1
@sreginogemothも確認できます:event.target.idid値を持つこともできます
Arthur

2

親から継承したインターフェース HTMLButtonElementを使用できますHTMLElement

このようにして、オートコンプリートを行うことができます...

<button (click)="toggle($event)" class="someclass otherClass" id="btn1"></button>

toggle(event: MouseEvent) {
    const button = event.target as HTMLButtonElement;
    console.log(button.id);
    console.log(button.className);
 }

World Wide Web Consortium(W3C)のドキュメントからHTMLElementのすべてのリストを表示するには

StackBlitzデモ


0

id角度6のボタンの属性にアクセスしたい場合は、このコードに従ってください

`@Component({
  selector: 'my-app',
  template: `
    <button (click)="clicked($event)" id="myId">Click Me</button>
  `
})
export class AppComponent {
  clicked(event) {
    const target = event.target || event.srcElement || event.currentTarget;
    const idAttr = target.attributes.id;
    const value = idAttr.nodeValue;
  }
}`

君の idの価値、

の値はvalueですmyId

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.