Jquery重音不敏感,具有多个值自动完成function

以下是我在以下JS小提琴中总结的问题: http : //jsfiddle.net/sidou/3R5B2/

我需要创建一个具有多个值的自动完成字段(这在附加脚本的第一部分中正确完成)但我还希望在获取与输入字符串相比的自动完成建议时它对重音不敏感(正如它在附加脚本的第二部分)。

如何合并这两种行为? 或换句话说,如何在保持多值选择function的同时简单地使第一个自动完成字段重音不敏感。

您可以输入“caféteria”一词来试试

谢谢

在这里,我为你修好了: http : //jsfiddle.net/cps7/3R5B2/7/ 。 第二个输入按您的意愿行事。

$(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: