我看过一些问题,例如https://stackoverflow.com/a/7222592/2332251
我仍然无法将其与我拥有的代码进行协调。
目前,以下内容非常适合在我开始输入时搜索用户名。
$(function() {
$("#appendedInputButton").autocomplete({
minLength: 2,
source: "searchusers.php"
});
});
searchusers.php 中的函数从数据库中输出用户名。
正如我所说,我无法让其他 @mention 解决方案为我工作。我尝试过复制其他解决方案并交换我的详细信息,但似乎没有任何效果。
所以...
- 我需要对当前的自动完成脚本执行什么操作才能使其仅在我最初键入“@”符号时才加载?
- 我真的希望能够在我的帖子中有多个@mentions
- (可选)当自动完成建议用户名并且当我从列表中选择用户名时,我希望它出现在我的帖子中,@symbol 仍附加到用户名的前面,例如“你好 @john,@ 符号仍附加到您的用户名”
如果您需要更多信息,请发表评论,我会提供更多信息:)
编辑我真的不确定使它起作用的语法。例如,使用我上面发布的示例答案,我想出了(但它不起作用):
function split(val) {
return val.split(/@\s*/);
}
function extractLast(term) {
return split(term).pop();
}
function getTags(term, callback) {
$.ajax({
url: "searchusers.php",
data: {
filter: term,
pagesize: 5
},
type: "POST",
success: callback,
jsonp: "jsonp",
dataType: "jsonp"
});
}
$(document).ready(function() {
$("#appendedInputButton")
// don't navigate away from the field on tab when selecting an item
.bind("keydown", function(event) {
if (event.keyCode === $.ui.keyCode.TAB && $(this).data("autocomplete").menu.active) {
event.preventDefault();
}
}).autocomplete({
source: function(request, response) {
if (request.term.indexOf("@") >= 0) {
$("#loading").show();
getTags(extractLast(request.term), function(data) {
response($.map(data.tags, function(el) {
return {
value: el.name,
count: el.count
}
}));
$("#loading").hide();
});
}
},
focus: function() {
// prevent value inserted on focus
return false;
},
select: function(event, ui) {
var terms = split(this.value);
// remove the current input
terms.pop();
// add the selected item
terms.push(ui.item.value);
// add placeholder to get the comma-and-space at the end
terms.push("");
this.value = terms.join("");
return false;
}
}).data("autocomplete")._renderItem = function(ul, item) {
return $("<li>")
.data("item.autocomplete", item)
.append("<a>" + item.label + " <span class='count'>(" + item.count + ")</span></a>")
.appendTo(ul);
};
});
我在哪里插入 searchusers.php、#appendedInputButton 和其他特定信息?我希望这是有道理的。