Jquery 自动完成,使类别可点击
Jquery autocomplete, make categories clickable
我正在使用 jquery 自动完成类别,我想让类别作为项目可点击。
$(function() {
$("#js_autocomplete_ville").autocomplete({
source: "ajax_villes.php",
delay: 100,
minLength: 1,
select: function(event, ui) {
$('#js_searchform').prepend('<input type="hidden" name="villeid" value="' + ui.item.label + '">');
},
create: function() {
$('.ui-autocomplete').addClass('ui-front');
var currentDepartement = "";
var currentVilleDepartement = "";
$(this).data('ui-autocomplete')._renderItem = function(ul, item) {
if (item.dep_nom != currentDepartement) {
ul.append("<li class='js_level1 ui-autocomplete-category' id='li_" + item.num_departement + "'>" + item.dep_nom + " (" + item.num_departement + ")</li>");
currentDepartement = item.dep_nom;
}
var itemVilleDepartement = item.dep_nom + item.v_nom;
if (itemVilleDepartement != currentVilleDepartement) {
currentVilleDepartement = itemVilleDepartement;
return $("<li class='js_level2' id='" + item.label + "'>")
.append('<a>' + item.value + '</a>')
.appendTo(ul);
} else {
return $("")
.append('')
.appendTo(ul);
}
};
},
focus: function(event, ui) {
$("#js_autocomplete_ville").val(ui.item.value);
return false;
},
// optional
open: function(event, ui) {
$(".ui-autocomplete").css("z-index", 1000);
}
});});
我尝试在 'select' 事件中做一些测试,但没有结果!
可能吗 ?有任何想法吗 ?
谢谢你的帮助,
威利
是的,但由于添加的项目是动态的,您需要使用附加到不变祖先元素的委托事件处理程序:
例如类似于:
$(document).on('click', '.js_level1', function(){
alert(".js_level1 clicked!");
});
它的工作原理是侦听冒泡事件,然后应用 jQuery select 或事件时间,而不是 事件注册 时间。这意味着元素只需要在您单击时出现。
document
是默认值,如果你没有更近的元素,你可以 select。切勿将 'body'
用于委托事件,因为样式会阻止 body
响应冒泡点击事件。
注意: 没有代码 运行(例如在 JSFiddle 中)我不能更具体
这是我的解决方案,感谢 TrueBlueAussie
$(document).on('click', '#ui-id-1 .js_level1', function() {
var inputValue = $(this).attr('id');
var inputLabel = $(this).text();
$("input[name='ville_id_moteur']").val(inputValue);
$("input[name='ville']").val(inputLabel);
$("#js_autocomplete_ville").autocomplete("close");
});
再见,
威廉
我正在使用 jquery 自动完成类别,我想让类别作为项目可点击。
$(function() {
$("#js_autocomplete_ville").autocomplete({
source: "ajax_villes.php",
delay: 100,
minLength: 1,
select: function(event, ui) {
$('#js_searchform').prepend('<input type="hidden" name="villeid" value="' + ui.item.label + '">');
},
create: function() {
$('.ui-autocomplete').addClass('ui-front');
var currentDepartement = "";
var currentVilleDepartement = "";
$(this).data('ui-autocomplete')._renderItem = function(ul, item) {
if (item.dep_nom != currentDepartement) {
ul.append("<li class='js_level1 ui-autocomplete-category' id='li_" + item.num_departement + "'>" + item.dep_nom + " (" + item.num_departement + ")</li>");
currentDepartement = item.dep_nom;
}
var itemVilleDepartement = item.dep_nom + item.v_nom;
if (itemVilleDepartement != currentVilleDepartement) {
currentVilleDepartement = itemVilleDepartement;
return $("<li class='js_level2' id='" + item.label + "'>")
.append('<a>' + item.value + '</a>')
.appendTo(ul);
} else {
return $("")
.append('')
.appendTo(ul);
}
};
},
focus: function(event, ui) {
$("#js_autocomplete_ville").val(ui.item.value);
return false;
},
// optional
open: function(event, ui) {
$(".ui-autocomplete").css("z-index", 1000);
}
});});
我尝试在 'select' 事件中做一些测试,但没有结果! 可能吗 ?有任何想法吗 ? 谢谢你的帮助, 威利
是的,但由于添加的项目是动态的,您需要使用附加到不变祖先元素的委托事件处理程序:
例如类似于:
$(document).on('click', '.js_level1', function(){
alert(".js_level1 clicked!");
});
它的工作原理是侦听冒泡事件,然后应用 jQuery select 或事件时间,而不是 事件注册 时间。这意味着元素只需要在您单击时出现。
document
是默认值,如果你没有更近的元素,你可以 select。切勿将 'body'
用于委托事件,因为样式会阻止 body
响应冒泡点击事件。
注意: 没有代码 运行(例如在 JSFiddle 中)我不能更具体
这是我的解决方案,感谢 TrueBlueAussie
$(document).on('click', '#ui-id-1 .js_level1', function() {
var inputValue = $(this).attr('id');
var inputLabel = $(this).text();
$("input[name='ville_id_moteur']").val(inputValue);
$("input[name='ville']").val(inputLabel);
$("#js_autocomplete_ville").autocomplete("close");
});
再见, 威廉