我有一个用于jQuery自动实现输入字段的小回调函数。 该函数有2个参数:term =字符串,输入到输入字段,url = php脚本的url,用于生成建议。
脚本看起来像这样:
function m(term,url) {
var y = '';
jQuery.get(url, { term:term }, function(data){ });
return y;
}
您在文本字段中键入的所有内容都将发送到php脚本,该脚本会返回建议列表。
在function(data){}
区块内,应该发生两件事:
将JSON字符串编码为一个数组(JQuery自动完成需要它作为返回值)。我试过这个:y=eval("(" + data + ")");
。这是正确的吗?
从PHP端生成的JSON字符串看起来像那样(例如term =“nur”)
[“nuri al maliki”,“nursultan nasarbajew”,“n \ u00fcrnberger prozess”] n \ u00fcrnberger是“nürnberger”的编码版本
突出显示建议字词内的字词。示例:输入值为“ris”,因此建议示例应为sun<b>ris</b>e
。
有没有办法像.replace
那样使用数组?
应用程序运行在Yii框架下 - 所以我想找到一个解决方案。
答案 0 :(得分:1)
答案 1 :(得分:0)
您可以通过以下方式定义您收到的字符串是否为JSON:
jQuery.get(url, { term:term }, function(data){ }, "json");
然后在回调函数中查看收到的项目,并用包装的版本替换找到的字符串:
for (i=0, iLen=data.length; i<iLen; i++) {
data[i] = data[i].replace(new RegExp(term), "<b>$1</b>");
}
答案 2 :(得分:0)
我尝试了DarthJDG的链接并按照这个SO问题:jQueryUI: how can I custom-format the Autocomplete plug-in results?
我认为由于Javascript / Jquery / ...的知识不足,我无法将该解决方案应用于我的应用程序。我一直收到错误“$ .ui is undefined”。 挑战(对我而言)是:将代码放在Yii框架的哪个位置,我使用哪一个。
所以我从Yii论坛得到了帮助,我想在这里发布明确的解决方案。
您只需注册以下脚本即可。在POS_LOAD注册它是重要的:
Yii::app()->clientScript->registerScript('highlightAC','$.ui.autocomplete.prototype._renderItem = function (ul, item) {
item.label = item.label.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + $.ui.autocomplete.escapeRegex(this.term) + ")(?![^<>]*>)(?![^&;]+;)", "gi"), "<strong>$1</strong>");
return $("<li></li>")
.data("item.autocomplete", item)
.append("<a>" + item.label + "</a>")
.appendTo(ul);
};',CClientScript::POS_LOAD);
就是这样。 (感谢来自Yii论坛的Antonio)