jQuery UI-自动完成-自定义样式?
我正在使用下面的代码,它正在工作,返回值等等,但是jQuery UI-自动完成-自定义样式?,jquery,css,jquery-ui,jquery-autocomplete,Jquery,Css,Jquery Ui,Jquery Autocomplete,我正在使用下面的代码,它正在工作,返回值等等,但是和标记显示为文本,而不是呈现。我希望item.id和item.label位于不同的行上,如果可能,item.id粗体: $( "#predictSearch" ).autocomplete({ source: function( request, response ) { $.ajax({ url: "index.pl", dataType: "json", data: { term: request.term
和
标记显示为文本,而不是呈现。我希望item.id
和item.label
位于不同的行上,如果可能,item.id
粗体:
$( "#predictSearch" ).autocomplete({
source: function( request, response ) {
$.ajax({
url: "index.pl",
dataType: "json",
data: {
term: request.term
},
success: function( data ) {
response( $.map( data.items, function( item ) {
return {
label: '<B>' + item.id + '</B><br>' + item.label,
value: item.id
}
}));
}
});
},
minLength: 2
});
$(“#预测搜索”).autocomplete({
来源:功能(请求、响应){
$.ajax({
url:“index.pl”,
数据类型:“json”,
数据:{
期限:request.term
},
成功:功能(数据){
响应($.map(data.items,函数(item)){
返回{
标签:'+item.id+'
'+item.label,
值:item.id
}
}));
}
});
},
最小长度:2
});
使用_renderItem事件代替成功事件
现场实施。键入airport,您将注意到左侧的图像
注意:\u下面的renderItem
有一些复杂的计算。不要这样做,只是利用这个想法
$("#myInput")
.autocomplete({
minLength: 0,
delay: 10,
source: function (req, responseFn) {
//Your ajax call here returning only responseFn Array having item.id and item.id
},
select: function (event, ui) {
//action upon selecting an item
return false;
}
})
.data("autocomplete")
._renderItem = function (ul, item) {
return $("<li></li>")
.data("item.autocomplete", item)
.append("<a><span class='airoplane'>" + (item[0] + (item[2] == "" ? "" : ", " + item[2]) + (item[1] == "" ? "" : " (" + item[1] + ")")).replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + $.ui.autocomplete.escapeRegex(this.term).replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi, "\\$1") + ")(?![^<>]*>)(?![^&;]+;)", "gi"), "<span class='highlight'>$1</span>") + "</span></a>")
.appendTo(ul);
};
$(“#我的输入”)
.自动完成({
最小长度:0,
延误:10,
来源:功能(请求、响应){
//这里的ajax调用只返回具有item.id和item.id的responseFn数组
},
选择:功能(事件、用户界面){
//选择项目时的操作
返回false;
}
})
.数据(“自动完成”)
._renderItem=功能(ul,项目){
返回$(“”)
.data(“item.autocomplete”,item)
.append(“+(项[0]+(项[2]==”?:“,“+项[2])+(项[1]==”?:“(“+项[1]+”)))。替换(新的RegExp((?![^&;]+)(?!)(?![^&;]+;),“gi”),“$1”)+”)
.附录(ul);
};
似乎您有一些额外的代码(ajax调用)用于自动完成,而这些代码可能不需要。但是,您可以只交换jquery输入的特殊字符,以便在自动完成的“open”事件中转义html
$("#autocomplete_field").autocomplete({
source: "autocomplete.php",
minLength: 2,
open: function(event, ui){
$("ul.ui-autocomplete li a").each(function(){
var htmlString = $(this).html().replace(/</g, '<');
htmlString = htmlString.replace(/>/g, '>');
$(this).html(htmlString);
});
}
});
$(“#自动完成_字段”).autocomplete({
来源:“autocomplete.php”,
最小长度:2,
打开:功能(事件、用户界面){
$(“ul.ui-autocomplete li a”)。每个(函数(){
var htmlString=$(this.html().replace(//g',);
$(this.html(htmlString);
});
}
});
完整的例子
如果您在autcomplete中使用perl,这就是一个例子。我们通过在函数末尾添加以下代码来解决此问题:
$("ul.ui-autocomplete li a").each(function(){
var htmlString = $(this).html().replace(/</g, '<');
htmlString = htmlString.replace(/>/g, '>');
$(this).html(htmlString);
});
$(“ul.ui-autocomplete li a”)。每个(函数(){
var htmlString=$(this.html().replace(//g',);
$(this.html(htmlString);
});
这里没有触发事件打开回调函数。根据iMatoria的回答,我就是这样做的
var jAuto = $('#purchaser-autocomplete input:text');
jAuto.autocomplete({
source: URL
minLength: 2,
select: function (event, ui) {
//Do Stuff
}
});
jAuto.data("autocomplete")._renderItem = function (ul, item) {
var cssClass = "";
if (item.id.substring(0,1) === 'S') { cssClass = " class='item-staff'"; }
return $("<li" + cssClass + "></li>")
.data("item.autocomplete", item)
.append("<a>" + item.label + "</a>")
.appendTo(ul);
}
jAuto.focus();
var jAuto=$(“#买方自动完成输入:文本”);
jAuto.autocomplete({
来源:URL
最小长度:2,
选择:功能(事件、用户界面){
//做事
}
});
jAuto.data(“自动完成”)。\u renderItem=功能(ul,项目){
var cssClass=“”;
if(item.id.substring(0,1)=='S'){cssClass=“class='item-staff'”;}
返回$(“”)
.data(“item.autocomplete”,item)
.append(“+item.label+”)
.附录(ul);
}
jAuto.focus();
你是说HTML标签吗?--etc?
标记被去除,使用
代替,
优于br使用“\r\n”,后者用于新行,但使用双引号而不是单引号lol只是以防万一…@Jatin是的,如果你看标签:行我正在返回id和标签,我希望其中一个在屏幕上另一个的下方,因此,我尝试添加一个标记,但它没有被呈现。@Val标记并没有被弃用-它的用途只是被重新定义为“一个元素,它代表一段文本,在风格上与普通散文有所不同,而不传达任何额外的重要性。”谢谢Jen,这很有意义。我不确定,但我认为这一定是性能问题。每次在文本框内调用用户函数并开始搜索时,都应调用Open函数。相反,可以使用_renderItem函数。否则,这是一个很好的解决方案;我倾向于打印$query->header();,并使用DBI占位符来防止SQL注入。谢谢again@Raoul感谢您提供有关DBI占位符的提示。我更新了我的代码。@iMatoria不会在用户每次开始搜索时触发renderItem。我自己也不确定,我会调查的。