【发布时间】:2015-01-10 15:41:57
【问题描述】:
我在尝试使用 Jquery-UI 将自动完成字段实现到指令中时遇到了一些麻烦。
让我解释一下。 这是我的 html 元素:
<div class="form-group" >
<input type="text" placeholder="Find a category" data-category-autocomplete data-append-to=".autocomplete-container" data-ng-model="categories" class="form-control login-field" name="category_find"></input>
<div class="autocomplete-container"></div>
</div>
现在,这里是 angular js 指令:
app.directive('categoryAutocomplete', function(HomeService) {
return {
restrict: 'A',
link: function(scope, elem, attrs) {
elem.autocomplete({
source: function(request, response) {
HomeService.search_category(this.term).then(function(success) {
response(success);
}, function(error) {
response("");
});
}, select: function(event, ui) {
scope.choose_category(ui.item.id, ui.item.label, true);
scope.$apply();
}
, appendTo : attrs.appendTo
}).data("ui-autocomplete")._renderItem = function(ul, item) {
item.label = item.title;
item.id = item.id_category;
var categoryLine = $("<a>").html(item.title);
return $('<li>').append($("<a>").append(categoryLine).html()).appendTo(ul);
};
}
}
});
最后,选择类别功能:
$scope.choose_category = function(id_category, label) {
$scope.category = label;
$scope.id_category = id_category;
};
所以,它在第一次使用时运行良好。让我解释每个步骤:
- 在我的字段中输入一些带有结果的字符
- 选择一个结果
- 我的选择没问题,自动完成字段正在重置 这很好用
- 现在我想进行另一个搜索,所以我输入 someting new
- 结果显示出来了,但我不能再点击它了,就像我不想进入自动完成指令的“选择”,但“源”运行良好
如您所见,就像我只能选择一次我的自动完成结果,但是 scope.apply();似乎在第二次搜索时“破坏”了选择可能性。
有人看到我的问题吗?
感谢您提供的任何帮助!
【问题讨论】:
-
不能将
<a>附加到另一个<a>,这是无效的 html。创建一个复制您的问题的演示 -
@Mayous 在控制台中是否有任何错误?
-
在应用范围之前,您应该始终检查阶段。该语句应该是 if(!scope.$$phase) scope.$apply()
-
大家好,感谢您的帮助。我遵循@charlietfl 的建议并在 jsfiddle 上创建了一个示例,并且代码运行良好。为了使我的帖子更具相关性,我删除了一些其他无用的代码,但我认为其中一些代码现在是问题所在。我会回来提供有关使我的自动完成字段停止工作的代码和平的更多信息!
标签: jquery angularjs jquery-ui autocomplete angularjs-directive