1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
/**
* Gère un hybride permettant une recherche par saisie sur un objet SELECT
* Paramètres : str sel_select : Sélecteur menant à l'objet SELECT
* str sel_input : Sélecteur menant à l'objet INPUT (chaîne vide si aucun)
* str vmod : Nom de la Classe PHP à interroger en Ajax
* str vfunc : Nom de la fonction de la Classe qui va générer les résultats
* str e : Événement
**/
function YUI_autocomplete(sel_select, sel_input, vmod, vfunc, e) {
if(($(sel_select).length == 1)&&($(sel_select).length == 1)) {
if($(sel_input).length == 0) {
var i = $("<input>");
$(i).attr({"type":"text","id":"id"+random_range(1000,9999)});
sel_input = "#"+$(i).attr("id");
$(i).addClass("select_override");
$(i).css({"width":$(sel_select).outerWidth() - 18,"margin-left":-1 * $(sel_select).outerWidth(),"margin-top":"0px","position":"absolute"});
$(sel_select).after(i);
}
if(e.keyCode) var c = String.fromCharCode(e.keyCode); //Internet Explorer
else var c = String.fromCharCode(e.which); //Firefox, Chrome
YUI().use('autocomplete', 'autocomplete-highlighters', function (Y) {
var ac = new Y.AutoComplete({
inputNode: sel_input,
source : "jx.php?vmod="+vmod+"&vfunc="+vfunc+"&query={query}",
resultTextLocator:"text",
render:true,
alwaysShowList:false,
tabSelect:true,
maxResults:150,
minQueryLength:2,
resultHighlighter:'wordMatch'
});
//Transfert de la valeur sélectionnée vers l'objet SELECT
ac.on("select", function(e, itemNode) {
$(sel_input).css({"background":"transparent"});
var id = e.result.raw.id;
if(!isNaN(id)) {
$(sel_select).val(id);
setTimeout("$('"+sel_input+"').val(''); $('"+sel_select+"').focus();", 50); //Si pas de délais, ne s'exécute pas...
$(sel_select).trigger("change");
}
});
$(sel_input).focus(); //Place le curseur dans le champ de saisie
$(sel_input).val(c); //Insère le premier caractère
$(sel_input).css({"background-color":"#FFFFFF"});
});
}
else {
alert("L'option de recherche sur saisie ne peut pas s'exécuter car la référence à la liste de choix \""+sel_select+"\" n'est pas valide.");
return false;
}
} |
Partager