【发布时间】:2013-03-09 06:22:25
【问题描述】:
我有这个角码:
<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 方法吗?在jQuery中使用.closest()和.find()等函数?
更新:
我发现这个 hack 有效(但它似乎仍然不是正确的解决方案):
function doSomething(element,$event) {
setTimeout(function(){
$($event.srcElement).closest('.element-wrapper').find('input').focus();
},0)
}
我用 setTimeout 包装它,所以在 Angular 完成所有操作后,它会专注于输入元素。
【问题讨论】:
-
您应该查看第二个包装器 - 而不是第一个
-
@Pete,我写错了类名。我修好了它。这不是查找元素的问题,而是如何使用 AngularJS 正确完成它的问题
-
你能提供一个你想要达到的目标吗?
-
第二个 hack 真的很丑,或者,你应该使用 $timeout 而不是 setTimeout (虽然我不建议这样做)
标签: javascript jquery angularjs