我正在使用JQuery UI Autocomplete,我有一组通过ajax返回的项目,搜索引擎突出显示的条款(因此标签已包含html)。问题是,每次我选择一个项目时,带有html标签的值都会插入到文本框中,这当然不是很好。我想知道无论如何我都可以在插入文本框之前从标签上剥离所有标签
var cache = {}, lastXhr;
$('#location_name').autocomplete({
source: function( request, response ) {
var q = request.term;
if ( q in cache ) {
response( cache[ q ] );
return;
}
lastXhr = $.getJSON( "location_search/", {q: q}, function( data, status, xhr ) {
$.each(data, function(i, v){
data[i].label = v.name + (v.address !== null ? ', ' + v.address : '');
});
cache[ q ] = data;
if ( xhr === lastXhr ) {
response( cache [q] );
}
});
},
select: function( event, ui ) {
$('#location_id').val(ui.item.id);
$('#selected_location').html(ui.item.label);
}
}).data( "autocomplete" )._renderItem = function( ul, item ) {
return $( "<li></li>" )
.data( "item.autocomplete", item )
.append( "<a>"+ item.label + "</a>" ) // + + "<br>" + item.desc + "</a>"
.appendTo( ul );
};
答案 0 :(得分:2)
添加此功能:
function stripHTML(oldString) {
return oldString.replace(/<[^>]*>/g, "");
}
并添加到您的代码中:
$('#location_name').change(function(){
$(this).val(stripHTML($(this).val());
});
答案 1 :(得分:0)
为了完成这项工作,您还应该传递 item.value
在选择时,它首先查找 item.value ,然后查找 item.label
这样你可以留下你的选择:像那样
select: function( event, ui ) {
$('#selected_location').html(ui.item.label);
}