lấy phần tử gốc từ ng-click


204

Tôi có một danh sách các mục theo quan điểm của tôi ng-clickkèm theo chúng:

<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>

Tôi đang xử lý các sự kiện nhấp trong foohàm trong chỉ thị của mình, chuyển qua $eventlàm tham chiếu đến đối tượng được nhấp, nhưng tôi đang nhận được tham chiếu đến imgthẻ, thay vì lithẻ. Sau đó tôi phải làm những thứ như thế này để có được 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
       }
   })();

Có cách nào đơn giản để có được tham chiếu đến phần tử ng-clickbị ràng buộc mà không thực hiện các thao tác DOM trong chỉ thị của tôi không?

Câu trả lời:


317

Bạn cần $event.currentTargetthay vì $event.target.


3
Cảm ơn, nó hoạt động. Thật kỳ lạ khi thuộc tính currentTarget trong đối tượng $ event được đặt thành null.
Ozrix

2
Điều này chắc chắn là lạ ... nếu bạn đăng nhập đối tượng $ event, $ event.cienTarget có vẻ là null. Tuy nhiên, nếu bạn đăng nhập tham chiếu $ event.cienTarget, nó sẽ hiển thị phần tử chính xác.
richardaday

6
Tôi thường sẽ sử dụng var elem = $event.currentTarget || $event.srcElement. Nó luôn thân thiện với nhiều trình duyệt hơn, nhưng tôi không biết nó có cần thiết nữa không.
WebWanderer

12
console.log hiển thị các đối tượng có thể thay đổi sâu ở trạng thái thực thi cuối cùng, không hiển thị ở trạng thái khi console.log được gọi. xem stackoverflow.com/questions/22059811/ khăn
Tivie

13

Không phải là một câu trả lời trực tiếp cho câu hỏi này mà là "vấn đề" $event.currentTargetrõ ràng được đặt thành null.

Điều này là do thực tế là console.log hiển thị các đối tượng có thể thay đổi sâu ở trạng thái thực thi cuối cùng, chứ không phải ở trạng thái khi console.log được gọi.

Bạn có thể kiểm tra điều này để biết thêm thông tin: Các cuộc gọi liên tiếp đến console.log tạo ra kết quả không nhất quán

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.