我尝试将ng-click和ng-blur结合使用,但会导致错误,不会触发ng-click。
我有输入,下面我有输入聚焦时显示的选项列表。
<div ng-app="myApp" ng-controller="MyCtrl">
<input type="text"
ng-model="value"
ng-focus="onFocus()"
ng-blur="onBlur()"
>
<ul ng-show="visible">
<li ng-repeat="i in items" ng-click="setValue(i)">{{i}}</li>
</ul>
</div>
在列表中的项目上我定义了ng-click。它为模型树立了新的价值。 它可以工作,但是当我添加隐藏输入模糊选项的功能时,新值不会更新。
这是我的js代码:
var myApp = angular.module('myApp',[]);
function MyCtrl($scope) {
$scope.visible = false;
$scope.items = ["Foo", "Bar", "Baz"];
$scope.onFocus = function() {$scope.visible = true;};
$scope.onBlur = function() {$scope.visible = false;};
$scope.setValue = function(value) { $scope.value = value; };
}
myApp.controller('MyCtrl', MyCtrl)
以下是完整示例: https://jsfiddle.net/uqs19rea/
答案 0 :(得分:3)
因为执行ng-blur
之前的ng-click
函数调用。因此,您可以使用$timeout
设置$scope.visible = false;
$timeout(function(){ // ensure that $timeout injected in your controller
$scope.visible = false;
},100);
或强>
您可以在ng-blure
函数中设置$scope.visible = false;
,而不是使用$scope.setValue
。像:
:
$scope.setValue = function(value) {
$scope.value = value;
$scope.visible = false;
};
和html:
<div ng-app="myApp" ng-controller="MyCtrl">
<input type="text" ng-model="value" ng-focus="onFocus()">
<ul ng-show="visible">
<li ng-repeat="i in items" ng-click="setValue(i)">{{i}}</li>
</ul>
</div>
答案 1 :(得分:2)
这是因为blur
事件发生在click
事件之前,这意味着当点击发生时列表项已被隐藏。
您可以延迟隐藏列表,例如使用angular的$timout
服务:
function MyCtrl($scope, $timeout) {
$scope.visible = false;
$scope.items = ["Foo", "Bar", "Baz"];
$scope.onFocus = function() {$scope.visible = true;};
$scope.onBlur = function() {
$timeout(function() {$scope.visible = false;}, 200);
};
$scope.setValue = function(value) { $scope.value = value; };
}
请参阅uppdated示例:https://jsfiddle.net/uqs19rea/1/
答案 2 :(得分:0)
问题是您的输入的String[] values = line.Split(':');
是在onBlur
触发之前处理的......您可以通过将ng-click()
更改为ng-click
来测试您的代码/ p>