У меня есть этот angular код:
<div class="element-wrapper" ng-repeat="element in elements">
<div class="first-wrapper">
<div class="button" ng-click="doSomething(element,$event)">{{element.name}}</div>
</div>
<div class="second-wrapper">
<input type="text" value="{{element.value}}">
</div>
</div>
Что я хочу:, когда пользователь нажимает кнопку - элемент ввода будет сфокусирован.
Как найти элемент ввода после щелчка элемента кнопки и сфокусировать его?
Я могу сделать функцию, которая выглядит так:
function doSomething(element,$event) {
//option A - start manipulating in the dark:
$event.srcElement.parentNode.childNodes[1]
//option B - wrapping it with jQuery:
$($event.srcElement).closest('.element-wrapper').find('input').focus();
}
Ни один из них не работает - есть ли более приятный способ angular сделать это? Использование таких функций, как .closest()
и .find()
, как в jQuery?
Update:
Я нашел этот хак для работы (но он все еще не кажется правильным решением):
function doSomething(element,$event) {
setTimeout(function(){
$($event.srcElement).closest('.element-wrapper').find('input').focus();
},0)
}
Я обматываю его с помощью setTimeout, после того как angular завершает все свои манипуляции, он фокусируется на элементе ввода.