Mam takie zdarzenie kliknięcia
<button (click)="toggle($event)" class="someclass" id="btn1"></button>
<button (click)="toggle($event)" class="someclass" id="btn2"></button>
Łapię zdarzenie w moim parametrze wejściowym funkcji i chcę dowiedzieć się, co dokładnie przycisk został kliknięty.
toggle(event) {
}
ale event
nie ma id
właściwości.
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
Jak mogę znaleźć id
?
AKTUALIZACJA: Plunkery są dobre, ale w moim przypadku mam lokalnie:
event.srcElement.attributes.id
- undefined
event.currentTarget.id
- ma wartość
Używam Chrome w najnowszej wersji 49.0.2623.87 m
Czy to możliwe Material Design Lite
? ponieważ go używam.
id
?id
wraz z średnicami.id
?event.currentTarget.id
Odpowiedzi:
Jeśli chcesz mieć dostęp do
id
atrybutu przycisku, możesz wykorzystaćsrcElement
właściwość wydarzenia:Zobacz ten plunkr: https://plnkr.co/edit/QGdou4?p=preview .
Zobacz to pytanie:
źródło
event.srcElement.attributes.id
jest nieokreślona nie wiem dlaczego ... ale znalazłemid
inevent.currentTarget.id
currentTarget
jest niezdefiniowane :-( Z jakiej przeglądarki korzystasz?angular2.dev.js:23597 TypeError: Cannot read property 'nodeValue' of undefined
var target = event.srcElement.attributes.id || event.currentTarget.id;
Dla użytkowników języka TypeScript:
źródło
const elementId: string = (event.target as Element).id;
Wreszcie znalazłem najprostszy sposób:
źródło
<button ...><i class="fa fa-check"></i></button>
i faktycznie klikniesz teni
element, który jest komponentem FontAwasome, wtedy event.target nie jest elementem,button
alei
.button
element, użyjevent.target.closest('button')
.Możesz po prostu przekazać wartość statyczną (lub zmienną z
*ngFor
lub cokolwiek)<button (click)="toggle(1)" class="someclass"> <button (click)="toggle(2)" class="someclass">
źródło
id
w takim przypadku?id
po prostu wybierz indeks z tablicy lub czegoś podobnego. Często jest zaskakujące, że tak często pomijamy najprostsze rozwiązania.Nie ma potrzeby zaliczania całego wydarzenia (chyba, że potrzebujesz innych aspektów wydarzenia niż podałeś). W rzeczywistości nie jest to zalecane. Możesz przekazać odniesienie do elementu po niewielkiej modyfikacji.
Demo StackBlitz
Technicznie nie musisz szukać przycisku, który został kliknięty, ponieważ minąłeś właściwy element.
Prowadzenie kątowe
źródło
Kiedy twój
HTMLElement
nie maid
,name
alboclass
na wezwanie,następnie użyj
źródło
zrób to po prostu: (jak powiedziano w komentarzu tutaj, na przykładzie z dwiema metodami)
demo: http://plnkr.co/edit/5kJaj9D13srJxmod213r?p=preview
źródło
event.srcElement.attributes.id
jest nieokreślona w moim przypadku nie wiem dlaczego ... ale znalazłemid
inevent.currentTarget.id
event
sprawdź w Object of fired, gdzie możesz zobaczyćid
event.target.id
może mieć również wartość idMożesz użyć jego interfejsu,
HTMLButtonElement
który dziedziczy po swoim rodzicuHTMLElement
!W ten sposób będziesz mógł mieć automatyczne uzupełnianie ...
Aby zobaczyć całą listę HTMLElement z dokumentacji World Wide Web Consortium (W3C)
Demo StackBlitz
źródło
Jeśli chcesz mieć dostęp do
id
atrybutu przycisku w kątowej 6, postępuj zgodnie z tym kodemjesteś
id
w wartości,wartość
value
jestmyId
.źródło