dapatkan elemen asli dari ng-klik


204

Saya memiliki daftar item dalam pandangan saya dengan ng-clickterlampir:

<ul id="team-filters">
    <li ng-click="foo($event, team)" ng-repeat="team in teams">
         <img src="{{team.logoSmall}}" alt="{{team.name}}" title="{{team.name}}">
    </li>
</ul>

Saya menangani acara klik dalam foofungsi dalam arahan saya, meneruskan $eventsebagai referensi ke objek yang telah diklik, tapi saya mendapatkan referensi ke imgtag, bukan litag. Saya kemudian harus melakukan hal-hal seperti ini untuk mendapatkan li:

$scope.foo = function($event, team) {
   var el = (function(){
       if ($event.target.nodeName === 'IMG') {
          return angular.element($event.target).parent(); // get li
       } else {
          return angular.element($event.target);          // is li
       }
   })();

Apakah ada cara sederhana untuk mendapatkan referensi ke elemen yang ng-clickterikat, tanpa melakukan operasi DOM dalam arahan saya?

Jawaban:


317

Anda perlu, $event.currentTargetbukan $event.target.


3
Terima kasih, ini berhasil. Sungguh aneh bahwa properti currentTarget dalam objek $ event disetel ke nol.
Ozrix

2
Ini benar-benar aneh ... jika Anda mencatat objek $ event, $ event.currentTarget terlihat null. Namun, jika Anda mencatat referensi $ event.currentTarget, ini menunjukkan elemen yang benar.
richardaday

6
Saya biasanya akan menggunakan var elem = $event.currentTarget || $event.srcElement. Selalu lebih ramah lintas-silang, namun saya tidak tahu apakah perlu lagi.
WebWanderer

12
console.log menunjukkan objek yang bisa berubah dalam kondisi eksekusi terakhir, bukan pada kondisi ketika console.log dipanggil. lihat stackoverflow.com/questions/22059811/...
Tivie

13

Bukan jawaban langsung untuk pertanyaan ini melainkan untuk "masalah" yang $event.currentTargettampaknya disetel ke nol.

Hal ini disebabkan oleh fakta bahwa console.log menunjukkan objek yang dapat berubah dalam kondisi eksekusi terakhir, bukan pada kondisi ketika console.log dipanggil.

Anda dapat memeriksa ini untuk informasi lebih lanjut: Panggilan berurutan ke console.log menghasilkan hasil yang tidak konsisten

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.