Ответ 1
Изменение:
angular.element(event.target)
в
angular.element(event.currentTarget)
исправлена моя проблема.
Мне кажется, что event.currentTarget предпочитает event.target в большинстве случаев использования случаев.
Для каждого элемента td в таблице у меня есть прикрепленный ng-click. Вот (упрощенный) html для каждой ячейки таблицы:
<td ng-click="cellClicked($event)">
<span ng-if="!cellEdit">{{event.eventName}}</span>
<input type="text" ng-if="cellEdit" ng-model="event.eventName">
</td>
И моя (упрощенная) функция ng-click:
scope.cellClicked = function (event) {
rowScope.cellEdit = true
angular.element(event.target).find('input').focus()
}
Его цель:
Сейчас это работает до тех пор, пока пользователь нажимает внутри элемента td, но не на элемент span:
console.log(angular.element(event.target)) #--> [td...] (as desired)
Однако, если пользователь нажимает на элемент span внутри td:
console.log(angular.element(event.target)) #--> [span...]
В этом случае использование задания фокуса не работает. Я надеялся получить доступ к родительскому элементу span, выполняя что-то вроде:
angular.element(event.target.closest('td'))
или
angular.element(event.target.parentNode)
Но он появляется, когда элемент проходит через событие $event и к нему обращается нет родительского контекста.
Как я могу:
Изменение:
angular.element(event.target)
в
angular.element(event.currentTarget)
исправлена моя проблема.
Мне кажется, что event.currentTarget предпочитает event.target в большинстве случаев использования случаев.
event.target.closest('td')
не будет работать, потому что event.target
является элементом DOM и не имеет метода closest
. Вам нужно создать объект jQuery для использования этого метода.
Попробуйте найти ближайший td
следующим образом:
angular.element(event.target).closest('td')