0

Я пытаюсь получить индекс щелкнутого элемента, но я продолжаю получать -1 в консоли. Я использую Array.prototype получить indexOf от nodelistПолучить индекс элемента щелчка

HTML:

<div ng-app='app' ng-controller='mainCtrl'> 
    <div app-click=""> 
    <div ng-repeat="json in myJson"> 
     <li>{{json}}</li> 
    </div> 
    </div> 
</div> 

JS:

.directive('appClick', function() { 
    return { 
    restrict: 'A', 
    scope: true, 
    controller: function($scope, $element) { 
     $element.bind("click",function(e){ 
      var index = Array.prototype.indexOf.call($element.children(), e.target); 
      console.log(index); 
     }); 
    } 
    } 
}); 

JSFiddle Demo

ответ

4

Другой вариант заключается в задании индексной

<div ng-app='app' ng-controller='mainCtrl'> 
    <div app-click=""> 
    <div ng-repeat="json in myJson"> 
     <li data-index="{{$index}}">{{json}}</li> 
    </div> 
    </div> 
</div> 

и прочитать его в щелчку

e.target.dataset.index 
+0

Должен был подумать об этом! Спасибо. – user4756836

+0

это имеет другое поведение при нажатии клавиши. Если я хочу, чтобы клавиша ввода имела такое же поведение, как и щелчок ... Я получаю неопределенное значение, когда я нажимаю клавишу ввода, но справа нажимает e.target, когда я нажимаю – user4756836

+0

. Как у li нажатие клавиши? – epascarello

2

e.target возвращение литий элемент, $ element.children () возвращение div Список не li
попробовать этот код:

var index = Array.prototype.indexOf.call($element.find("li"), e.target); 

angular.module('app', []).controller('mainCtrl', function($scope) { 
 
    $scope.myJson = ["mayank1", "mayank2", "mayank3", "mayank4", "mayank5", "mayank6", "mayank7", "mayank8", "mayank9"] 
 
}) 
 

 
.directive('appClick', function() { 
 
    return { 
 
    restrict: 'A', 
 
    scope: true, 
 
    controller: function($scope, $element) { 
 
     $element.bind("click",function(e){ 
 
     \t \t var index = Array.prototype.indexOf.call($element.find("li"), e.target); 
 
      console.log(index); 
 
     }); 
 
    } 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.20/angular.min.js"></script> 
 
<div ng-app='app' ng-controller='mainCtrl'> 
 
    <div app-click=""> 
 
    <div ng-repeat="json in myJson"> 
 
     <li>{{json}}</li> 
 
    </div> 
 
    </div> 
 
</div>

+0

один вопрос. Что делать, если у меня есть несколько ли, и я хочу перейти к конкретному ли с классом = "list1" – user4756836

+0

А также ... можете ли вы объяснить, почему $ element.children() не работает? – user4756836

+0

Вы можете использовать '.find (" li [class = 'list1'] ")', чтобы узнать элемент –

-1

Вы можете уточнить, что вы пытаетесь сделать? Почти наверняка есть лучший способ добиться этого, видя, как вы его разработали.

+0

Каков лучший способ? просто пытаюсь получить индекс элемента click в моей директиве – user4756836

Смежные вопросы