当聚焦于ng-repeat中的最后一个元素时,无法使用AngularJS / jQuery触发控制器内部的函数
Unable to trigger function inside controller using AngularJS / jQuery when focussed on last element in ng-repeat
在我的网页中,当用户关注最后一个<input>
时,我希望动态添加一组<input>
和<select>
。
如果我在<button>
上使用ng-click
,它可以正常工作,但不能在最后一个<input>
上使用focus
事件。
var Note = function($scope){
$scope.items = [];
$scope.options = [{name: 'x'}, {name: 'y'}];
$scope.add = function () {
console.log('adding..');
$scope.items.push({
question: "",
questionPlaceholder: "foo",
});
//console.dir($scope.items);
};
$scope.add();
$('input:last-child').on('focus', function(){ // does not work
console.log('adding elements dynamically');
$scope.add();
$scope.$apply();
});
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.13/angular.min.js"></script>
<div ng-app>
<div ng-controller="Note" id='itemsPool'>
<form ng-submit="submitHandler()">
<div ng-repeat="item in items">
<input type="text" placeholder="URL" ng-model="item.question">
<select ng-init="item.type = options[0]"
ng-model='item.type'
ng-options="option.name for option in options">
</select>
</div>
</form>
<button ng-click='add()'>Add</button> <!-- works! -->
<span><-- button will be removed eventually</span>
</div>
</div>
如何解决这个问题?
是否可以不使用jQuery解决这个问题?如何?
不要像现在这样使用jQuery,使用专用的Angular指令。在你的情况下,你需要ngFocus。
这个属性会很适合你:
ng-focus="$last && add()"
检查演示:
var Note = function($scope){
$scope.items = [];
$scope.options = [{name: 'x'}, {name: 'y'}];
$scope.add = function () {
console.log('adding..');
$scope.items.push({
question: "",
questionPlaceholder: "foo",
});
//console.dir($scope.items);
};
$scope.add();
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.13/angular.min.js"></script>
<div ng-app>
<div ng-controller="Note" id='itemsPool'>
<form ng-submit="submitHandler()">
<div ng-repeat="item in items">
<input type="text"
placeholder="URL"
ng-model="item.question"
ng-focus="$last && add()">
<select ng-init="item.type = options[0]"
ng-model='item.type'
ng-options="option.name for option in options">
</select>
</div>
</form>
<button ng-click='add()'>Add</button> <!-- works! -->
<span><-- button will be removed eventually</span>
</div>
</div>
你原来的方法的问题是,没有什么绑定焦点事件,当你在控制器中使用jQuery,因为ngRepeat
还没有呈现任何东西。当然,您可以使用父容器上的委托事件轻松地解决这个问题,但是您会看到它变得多么笨拙和不清晰。
相关文章:
- AngularJS-使模型变量可用于jQuery
- angularjs:访问angular控制器中的jquery变量
- AngularJS JQuery Ajax表单提交等效
- AngularJs.调用$http.success中的jQuery函数
- angularjs-bindng-click从jquery动态加载DOM
- 如何在angularJS或JQuery或JavaScript中保持控件
- 去掉jQuery for.css()修改,直接使用AngularJS
- AngularJS或jquery中的依赖级联下拉框列表
- 如何在Jquery中访问AngularJS
- jquery fancybox+angularJS:fancybox按钮动作问题
- 等效于 AngularJS 中的 jQuery html()
- 将代码从jquery移动到angularjs
- 使用JQuery在遗留html中加载动态AngularJS
- 在jQuery中调用AngularJS函数
- AngularJS:在使用嵌套的JQuery Sortables时保持Dom和Model同步
- Jquery + angularjs If 语句有效,但 href 值不变
- Chrome 应用程序使用 JavaScript / jQuery / AngularJS 访问外部资源
- jQuery.AngularJS中的ajaxStart等效函数| AngularJS中的Ajax事件处理程序
- 如何使用Jquery $.angularjs中的Ajax
- 将一个简单的ajax调用转换为使用承诺jQuery/AngularJS