Jus*_*ant 4 jquery-ui jquery-ui-autocomplete
任何人都知道使用 jQuery UI 的自动完成小部件的良好示例代码,该小部件可以在文本框中间自动完成单词,而不仅仅是在末尾自动完成单词?
我正在将 jquery UI 自动完成小部件用于支持输入多个标签的组件。这就像堆栈溢出的标签编辑器,但更简单:自动完成下拉菜单中没有花哨的格式,编辑框中没有“标签”背景图像。我从jQuery UI Autocomplete Multiple 示例开始并对其进行了修改。
它工作正常,除了自动完成对多标签字符串中间的标签不起作用。例如,如果我键入C Fortran然后在后面加上插入符号C并键入+,我希望C++在自动完成列表中看到,但我又看到Fortran了。
这是到目前为止的代码:http : //jsfiddle.net/WCfyB/4/
这与autocomplete in middle of text (如 Google Plus)所描述的问题相同,但该问题中的问题更简单,因为他可以依靠@文本中的空白来指示何时显示自动完成。就我而言,我不能仅仅依赖于文本——我实际上需要找出插入符号的位置并自动完成插入符号所在的单词。
我可以使用 caret 或其他插件自己构建它,但想知道是否已经有一个基于 jQuery-UI 的在线示例,我可以使用它而无需重新发明另一个轮子,特别是如果需要担心特定于浏览器的极端情况。理想情况下,它的行为是这样的:每当用户将插入符号放在标签内部或末尾(标签总是用 1+ 空格分隔)时,就会为该标签显示自动完成。知道一个好的样本吗?
我不知道任何这样的例子,但这里有一些你可以开始的东西:
var availableTags = [ ... ];
function split(val) {
return val.split(/ \s*/);
}
function extractLast(term) {
return split(term).pop();
}
$("#tags")
.bind("keydown", function(event) {
// don't navigate away from the field on tab when selecting an item
if (event.keyCode === $.ui.keyCode.TAB
&& $(this).data("autocomplete").menu.active) {
event.preventDefault();
}
})
.autocomplete({
minLength: 0,
source: function(request, response) {
var results = [],
selectionStart = this.element[0].selectionStart
term = extractLast(request.term.substring(0, selectionStart));
if (term.length > 0) {
results = $.ui.autocomplete.filter(availableTags, term);
}
response(results);
},
focus: function() {
return false; // prevent value inserted on focus
},
select: function(event, ui) {
var terms = split(this.value.substring(0, this.selectionStart));
terms.pop(); // remove the current input
terms.push(ui.item.value); // add the selected item
this.value =
$.trim(terms.join(" ") + this.value.substring(this.selectionStart)) + " ";
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
示例: http : //jsfiddle.net/WCfyB/7/
这里的主要警告是该selectionStart方法在 IE 中不起作用。您可以使用您在问题中提到的插件之一替换这些函数调用。
| 归档时间: |
|
| 查看次数: |
1997 次 |
| 最近记录: |