gpt4 book ai didi

jquery-ui - 中间单词的自动完成(jQuery UI)

转载 作者:行者123 更新时间:2023-12-01 14:30:13 25 4
gpt4 key购买 nike

任何人都知道使用 jQuery UI 的自动完成小部件的良好示例代码,该小部件可以在文本框中间自动完成单词,而不仅仅是在末尾自动完成单词?

我正在将 jquery UI 自动完成小部件用于支持输入多个标签的组件。这就像堆栈溢出的标签编辑器,但更简单:自动完成下拉菜单中没有花哨的格式,编辑框中没有“标签”背景图像。我从 jQuery UI Autocomplete Multiple sample 开始并修改了它。

它工作正常,除了自动完成对多标签字符串中间的标签不起作用。例如,如果我输入 C Fortran然后将插入符号放在 C 之后并输入 + ,我希望看到 C++在自动完成列表中,但我看到的是 Fortran再次。

这是到目前为止的代码:http://jsfiddle.net/WCfyB/4/

这与 autocomplete in middle of text (like 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;
}
});

示例: http://jsfiddle.net/WCfyB/7/

这里的主要警告是 selectionStart方法在 IE 中不起作用。您可以使用您在问题中提到的插件之一替换这些函数调用。

关于jquery-ui - 中间单词的自动完成(jQuery UI),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8751137/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com