JQuery insensible aux multiples valeurs autocomplete

Voici mon problème résumé dans le JS Fiddle suivant: http://jsfiddle.net/sidou/3R5B2/

Je dois créer un champ à complétion automatique avec plusieurs valeurs (ce qui est correctement effectué dans la première partie du script attaché), mais je souhaite également qu’il soit insensible aux accents lors de la récupération des suggestions de complétion automatique par rapport à la chaîne d’entrée deuxième partie du script ci-joint).

Comment fusionner les deux comportements? ou en d’autres termes, comment rendre simplement le premier accent de champ autocomplete insensible tout en conservant la fonction de sélection de valeurs multiples.

Vous pouvez l’essayer en tapant le mot “caféteria”

Merci

Ici, je l’ai corrigé pour vous: http://jsfiddle.net/cps7/3R5B2/7/ . La deuxième entrée agit comme vous le souhaitiez.

$(function() { var keywordz = [ "Caféteria", "AppleScript", "Asp", "BASIC", "C", "C++", "Clojure", "COBOL", "ColdFusion", "Erlang", "Fortran", "Groovy", "Haskell", "Java", "JavaScript", "Lisp", "Perl", "PHP", "Python", "Ruby", "Scala", "Scheme" ]; //////////////FIRST AUTOCOMPLETE WITHOUT ACCENT CHECK/////////////// function split(val) { return val.split(/,\s*/); } function extractLast(term) { return split(term).pop(); } $('#keywords') .keydown(function(e) { if (e.keyCode === $.ui.keyCode.TAB && $(this).data("autocomplete").menu.active) { e.preventDefault(); } if (e.which == 13) { e.preventDefault(); } $('#keywords').autocomplete({ minLength: 1, autoFocus: true, source: function(request, response) { // delegate back to autocomplete, but extract the last term response($.ui.autocomplete.filter( keywordz, extractLast(request.term))); }, focus: function() { // prevent value inserted on focus return false; }, select: function(event, ui) { var terms = split(this.value); // remove the current input terms.pop(); // add the selected item terms.push(ui.item.value); // add placeholder to get the comma-and-space at the end terms.push(""); this.value = terms.join(", "); return false; } }) }) //////////////END OF FIRST AUTOCOMPLETE WITHOUT ACCENT CHECK////////// //////////////SECOND AUTOCOMPLETE WITH ACCENT CHECK/////////////// var accentMap = { "à": "a", "â": "a", "é": "e", "è": "e", "ê": "e", "ë": "e", "ï": "i", "î": "i", "ô": "o", "ö": "o", "û": "u", "ù": "u" }; var normalize = function(term) { var ret = ""; for (var i = 0; i < term.length; i++) { ret += accentMap[term.charAt(i)] || term.charAt(i); } return ret; }; $('#keywords2') .keydown(function(e) { if (e.keyCode === $.ui.keyCode.TAB && $(this).data("autocomplete").menu.active) { e.preventDefault(); } if (e.which == 13) { e.preventDefault(); } $('#keywords2').autocomplete({ minLength: 1, autoFocus: true, //with accent check source: function(request, response) { var matcher = new RegExp($.ui.autocomplete.escapeRegex(extractLast(request.term)), "i"); response($.grep(keywordz, function(value) { value = value.truc || value.value || value; return matcher.test(value) || matcher.test(normalize(value)); })); }, focus: function() { // prevent value inserted on focus return false; }, select: function(event, ui) { var terms = split(this.value); // remove the current input terms.pop(); // add the selected item terms.push(ui.item.value); // add placeholder to get the comma-and-space at the end terms.push(""); this.value = terms.join(", "); return false; } }) }) //////////////END OF SECOND AUTOCOMPLETE WITH ACCENT CHECK////////// }); 
  multi values autocomplete:  

accent insensitive autocomplete: