【发布时间】:2017-08-21 18:34:51
【问题描述】:
我有一个动态输入数量的表单,由 AngularJS 控制。
<body ng-app="mainApp" ng-controller="CreatePollController" ng-init="init(3)">
<form id="createPollForm">
<input class="create-input" ng-repeat="n in questions" id="q_{{$index}}" name="q_{{$index}}" type="text" ng-keypress="createInputKeypress($event);"/>
<a href="javascript:void(0);" ng-click="addQuestion()">Add Question</a>
</form>
</body>
这是由以下角度代码控制的:
app.controller('CreatePollController', function($scope) {
$scope.questions = [];
$scope.init = function(numOfInputs){
for(var i = 0; i < numOfInputs; i++){
$scope.questions.push({
"questionText":""
});
}
};
$scope.addQuestion = function(){
$scope.questions.push({
"questionText":""
});
};
$scope.createInputKeypress = function(e){
if(e.keyCode === 13){
e.preventDefault();
var idx = Number(e.target.id.replace("q_", ""));
if(idx === this.questions.length - 1){
this.addQuestion();
}
// Wait for angular update ????
var nextId = "#q_" + (++idx);
$(nextId).focus();
}
};
});
目前,当用户在关注文本输入时按下 Enter 键时,会调用 createInputKeypress 函数,并且浏览器会关注表单中的下一个输入。但是,如果您当前专注于表单中的最后一个元素,它会向questions 数组添加一个新问题,这将导致在 DOM 中生成另一个输入。
但是,当创建这个新元素时,focus() 调用不起作用。我怀疑这是因为 angular 没有立即添加新元素,因此尝试使用 jQuery 定位和聚焦新元素不起作用。
有没有办法等待 DOM 更新,然后聚焦新元素?
【问题讨论】:
标签: javascript jquery html angularjs events