使用自动完成功能中的选择来筛选列表
Use a selection from an auto-complete to filter a list
这是一个类似于我想做的活塞。
我想为用户提供一个自动完成列表来过滤表。
过滤器在用户输入时正常工作,但如果用户从自动完成列表中选择了一个选项,则过滤器停止过滤。
例如…- 柱塞显示了一个SO用户可以获得的30个徽章列表。
- 我在文本框中键入'Au';过滤器将列表减少到两个徽章
我按下向下箭头键,然后输入。
'Autobiographer'是自动填入文本框的,但是列表仍然显示两个项目
如何选择自动完成选项并让它过滤列表?
<html lang="en">
<head>
<meta charset="utf-8" />
<title>jQuery UI Autocomplete - Default functionality</title>
<script data-require="angular.js@1.3.9" data-semver="1.3.9" src="https://code.angularjs.org/1.3.9/angular.js"></script>
<link rel="stylesheet" href="//code.jquery.com/ui/1.11.2/themes/smoothness/jquery-ui.css" />
<script src="//code.jquery.com/jquery-1.10.2.js"></script>
<script src="//code.jquery.com/ui/1.11.2/jquery-ui.js"></script>
<script>
var app = angular.module('app', []);
app.factory('badges', ['$http', function($http) {
return $http.get('https://api.stackexchange.com/2.2/badges?page=1&order=desc&sort=rank&site=stackoverflow')
.success(function(data) {
return data;
})
.error(function(err) {
return err;
});
}]);
app.factory('badgesagain', ['$http', function($http) {
return $http.get('https://api.stackexchange.com/2.2/badges?page=1&order=desc&sort=rank&site=stackoverflow')
.success(function(data) {
return data;
})
.error(function(err) {
return err;
});
}]);
app.controller('ctrl', ['$scope', 'badges', 'badgesagain', function($scope, badges, badgesagain){
badgeNames = [];
badges.then(function(response){
for(var i=0; i < response.data.items.length; i++){
badgeNames[i] = response.data.items[i].name;
}
});
$scope.availableTags = badgeNames;
$scope.complete = function () {
console.log('running');
$( "#tags" ).autocomplete({
source: $scope.availableTags
});
};
badges.success(function(data) {
$scope.badgeList = data['items'];
});
}]);
</script>
</head>
<body ng-app="app" ng-controller="ctrl">
<div class="ui-widget">
<label for="tags">Tags: </label>
<input id="tags" ng-keyup="complete()" ng-model="c.name"/>
</div>
<ol>
<li ng-repeat="badge in badgeList | filter:c ">
{{ badge.name }}
</li>
</ol>
<body ng-app="app" ng-controller="ctrl">
<div class="ui-widget">
<label for="tags">Tags: </label>
<input id="tags" ng-keyup="complete()" ng-model="c.name"/>
</div>
<ol>
<li ng-repeat="badge in badgeList | filter:c ">
{{ badge.name }}
</li>
</ol>
</body>
</html>
</body>
</html>
混合使用angular和jquery是自找麻烦。
考虑像allmight -autocomplete这样的角解决方案。
从长远来看,混合使用jQuery和angular并不理想。你很可能会遇到这样的问题,angular不知道jquery插件所做的更改。这就是为什么推荐使用angular插件,比如angular-bootstrap typeahead component
然而,我们可以通过让angular知道一个项目被选中来解决你的问题。我们可以使用jQuery自动完成的select回调来实现这一点。
请看下面的例子:
$scope.complete = function () {
console.log('running');
$( "#tags" ).autocomplete({
source: $scope.availableTags,
select : function(evt, ui) {
$scope.$apply(function() {
$scope.c.name = ui.item.value;
});
}
});
};
Plnkr演示
相关文章:
- JQuery DataTable列筛选器-选择下拉筛选器
- 接下来选择与筛选器匹配的选项
- 如何使用 jQuery 筛选器选择器查找表标记 td 值
- Html和javascript<选择>带有筛选的标签
- Javascript(jQuery)… 筛选选择器中文本中的字符
- 如果图元属于嵌套图元,请选择对其进行筛选的图元
- 如何根据其他下拉列表中的选择筛选下拉结果
- 数据表复制,只保存单个多重筛选选择的选定行
- 如何使用用户界面选择组筛选器属性
- 如何创建具有空白选项和未筛选状态的动态选择字段
- Ember.js:如何使用选择帮助程序上的观察者来筛选内容
- 根据第一个选择框中选择的内容筛选下一个选择框的值
- 谷歌图表:无效的列标签 |类别筛选器作为列选择器
- Dojo 筛选选择 - 动态将下拉列表中的特定选项标记为禁用(灰显且不可选择)
- onChange 不会触发筛选选择
- 第二个道场 筛选选择控件 onChange 事件不会被触发
- 使用特殊字符进行选择组筛选
- 数据表仅选择筛选的内容
- 如何从异步调用中填充ng表上的选择筛选器
- AJAX在CodeIgniter中选择筛选