我在angularjs中使用带有表单的弹出窗口。我使用自动完成器作为 -
portfolio.directive('auto', function($timeout) { var names = ["john", "bill", "charlie", "robert", "alban", "oscar", "marie", "celine", "brad", "drew", "rebecca", "michel", "francis", "jean", "paul", "pierre", "nicolas", "alfred", "gerard", "louis", "albert", "edouard", "benoit", "guillaume", "nicolas", "joseph"]; return { restrict : 'A', require : 'ngModel', link : function(scope, iElement, iAttrs) { iElement.autocomplete({ source: names, onSelect: function() { $timeout(function() { iElement.trigger('input'); }, 0); } }); } }; });
它正常工作,但弹出窗口后面会打开自动完成框。 任何人都可以建议解决方案吗?
答案 0 :(得分:3)
试试这个
<强> Working Demo 强>
<强> HTML 强>
<div ng-app='MyModule'>
<div ng-controller='DefaultCtrl'>
<input auto ng-model="selected">
selected = {{selected}}
</div>
</div>
<强>脚本强>
function DefaultCtrl($scope) {
}
angular.module('MyModule', []).directive('auto', function($timeout) {
var names = ["john", "bill", "charlie", "robert", "alban", "oscar", "marie", "celine", "brad", "drew", "rebecca", "michel", "francis", "jean", "paul", "pierre", "nicolas", "alfred", "gerard", "louis", "albert", "edouard", "benoit", "guillaume", "nicolas", "joseph"];
return {
restrict : 'A',
require : 'ngModel',
link : function(scope, iElement, iAttrs) {
iElement.autocomplete({
source: names,
select: function() {
$timeout(function() {
iElement.trigger('input');
}, 0);
}
});
}
};
});
答案 1 :(得分:-1)
使用此代码自动完成:
<div>
<input type="text" placeholder="Search for UserName" class="form-control" ng-keydown="checkKeyDown($event)" ng-keyup="checkKeyUp($event)"
NG-模型=&#34; Filters.UserId&#34; NG-变化=&#34;搜索()&#34; /&GT; {{建议}}
您的jQuery代码:
//Function To Call On ng-change
$scope.search = function () {
$scope.searchItems = $rootScope.users;
//Sort Array
$scope.searchItems.sort();
//Define Suggestions List
$scope.suggestions = [];
//Define Selected Suggestion Item
$scope.selectedIndex = -1;
$scope.suggestions = [];
var myMaxSuggestionListLength = 0;
for (var i = 0; i < $scope.searchItems.length; i++) {
var searchItemsSmallLetters = angular.lowercase($scope.searchItems[i].UserID);
var searchTextSmallLetters = angular.lowercase($scope.Filters.UserId);
if (searchItemsSmallLetters.indexOf(searchTextSmallLetters) !== -1) {
$scope.suggestions.push(searchItemsSmallLetters);
myMaxSuggestionListLength += 1;
if (myMaxSuggestionListLength == 10) {
break;
}
}
}
}
//Keep Track Of Search Text Value During The Selection From The Suggestions List
$scope.$watch('selectedIndex', function (val) {
if (val !== -1 && val != undefined) {
$scope.Filters.UserId = $scope.suggestions[$scope.selectedIndex];
}
});
//Text Field Events
//Function To Call on ng-keydown
$scope.checkKeyDown = function (event) {
if (event.keyCode === 40) {//down key, increment selectedIndex
event.preventDefault();
if ($scope.selectedIndex + 1 !== $scope.suggestions.length) {
$scope.selectedIndex++;
}
} else if (event.keyCode === 38) { //up key, decrement selectedIndex
event.preventDefault();
if ($scope.selectedIndex - 1 !== -1) {
$scope.selectedIndex--;
}
} else if (event.keyCode === 13) { //enter key, empty suggestions array
event.preventDefault();
$scope.suggestions = [];
}
}
//Function To Call on ng-keyup
$scope.checkKeyUp = function (event) {
if (event.keyCode !== 8 || event.keyCode !== 46) {//delete or backspace
if ($scope.Filters.UserId == "") {
$scope.suggestions = [];
}
}
}
//======================================
//List Item Events
//Function To Call on ng-click
$scope.AssignValueAndHide = function (index) {
$scope.Filters.UserId = $scope.suggestions[index];
$scope.suggestions = [];
}
//======================================
//User Autocomplete end