Angjular JS - 多个输入字段破坏 ui.bootstrap.typeahead 上的下拉黑客攻击
Angjular JS - multiple input fields breaks dropdown hack on ui.bootstrap.typeahead
我正在尝试使用 ui.bootstrap.typeahead 上的技巧来添加下拉菜单。黑客发现 here。它将在输入字段中单击鼠标打开一个下拉菜单。我让它在输入字段上工作,但是当添加如下所示的第二个输入时,下拉列表停止工作。
<input type="text" ng-model="selected" typeahead="item for item in items | filter:$viewValue:emptyOrMatch | limitTo:8" typeahead-focus >
<input type="text" ng-model="selected_2" typeahead="item for item in items | filter:$viewValue:emptyOrMatch | limitTo:8" typeahead-focus >
这里有一个plunker来演示问题。删除第二个输入,下拉菜单将起作用。我查看了该指令的范围,但我是 Angular 的新手,我无法弄清楚问题是什么以及如何解决它。任何想法将不胜感激。
这是一种更简洁的方法(如果可以使用 html5)。首先创建一个datalist
<datalist id="items">
<option ng-repeat="item in items" value="{{item.someValue}}"> </option>
</datalist>
然后供您输入。
<input class="input-sm form-control" id="itemsInput" type="search" list="items" />
只需确保 list="x" 和 datalist id="x" 相等即可。
这也会在您键入时 "autocomplete"
你的代码没问题。您只需要在 plunk 中添加此依赖项。
<link href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet" />
这将使您的下拉菜单浮动在输入字段的顶部,而不是被它们挡住。
下面是整个 Index.HTML。或者,在此处查看我的 Plunk:http://plnkr.co/edit/X4lSmQ?p=preview
<!DOCTYPE html>
<html ng-app="app">
<head>
<script data-require="angular.js@*" data-semver="1.4.0-beta.6" src="https://code.angularjs.org/1.4.0-beta.6/angular.js"></script>
<script data-require="ui-bootstrap@*" data-semver="0.12.1" src="http://angular-ui.github.io/bootstrap/ui-bootstrap-tpls-0.12.1.min.js"></script>
<script src="script.js"></script>
<link href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet" />
</head>
<body>
<h1>Dropdown!</h1>
<div>
<div class="container-fluid" ng-controller="TypeaheadCtrl">
<div class="form-group">
<input type="text" ng-model="selected" typeahead="item for item in items | filter:$viewValue:emptyOrMatch | limitTo:8" typeahead-focus="" />{{selected}}
<br />
<!-- if following line is removed the dropdown works agina.-->
<input class="col-lg-offset-4" type="text" ng-model="selected_2" typeahead="item for item in items | filter:$viewValue:emptyOrMatch | limitTo:8" typeahead-focus="" />{{selected_2}}
</div>
</div>
</div>
</body>
</html>
我正在尝试使用 ui.bootstrap.typeahead 上的技巧来添加下拉菜单。黑客发现 here。它将在输入字段中单击鼠标打开一个下拉菜单。我让它在输入字段上工作,但是当添加如下所示的第二个输入时,下拉列表停止工作。
<input type="text" ng-model="selected" typeahead="item for item in items | filter:$viewValue:emptyOrMatch | limitTo:8" typeahead-focus >
<input type="text" ng-model="selected_2" typeahead="item for item in items | filter:$viewValue:emptyOrMatch | limitTo:8" typeahead-focus >
这里有一个plunker来演示问题。删除第二个输入,下拉菜单将起作用。我查看了该指令的范围,但我是 Angular 的新手,我无法弄清楚问题是什么以及如何解决它。任何想法将不胜感激。
这是一种更简洁的方法(如果可以使用 html5)。首先创建一个datalist
<datalist id="items">
<option ng-repeat="item in items" value="{{item.someValue}}"> </option>
</datalist>
然后供您输入。
<input class="input-sm form-control" id="itemsInput" type="search" list="items" />
只需确保 list="x" 和 datalist id="x" 相等即可。
这也会在您键入时 "autocomplete"
你的代码没问题。您只需要在 plunk 中添加此依赖项。
<link href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet" />
这将使您的下拉菜单浮动在输入字段的顶部,而不是被它们挡住。
下面是整个 Index.HTML。或者,在此处查看我的 Plunk:http://plnkr.co/edit/X4lSmQ?p=preview
<!DOCTYPE html>
<html ng-app="app">
<head>
<script data-require="angular.js@*" data-semver="1.4.0-beta.6" src="https://code.angularjs.org/1.4.0-beta.6/angular.js"></script>
<script data-require="ui-bootstrap@*" data-semver="0.12.1" src="http://angular-ui.github.io/bootstrap/ui-bootstrap-tpls-0.12.1.min.js"></script>
<script src="script.js"></script>
<link href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet" />
</head>
<body>
<h1>Dropdown!</h1>
<div>
<div class="container-fluid" ng-controller="TypeaheadCtrl">
<div class="form-group">
<input type="text" ng-model="selected" typeahead="item for item in items | filter:$viewValue:emptyOrMatch | limitTo:8" typeahead-focus="" />{{selected}}
<br />
<!-- if following line is removed the dropdown works agina.-->
<input class="col-lg-offset-4" type="text" ng-model="selected_2" typeahead="item for item in items | filter:$viewValue:emptyOrMatch | limitTo:8" typeahead-focus="" />{{selected_2}}
</div>
</div>
</div>
</body>
</html>