Bonjour,

J’essaie d'utiliser l'autocompleteur de Jquery :

  • En Ajax
  • Possibilité de taper plusieurs mot séparé par des espaces (stringtokenizer coté serveur et un intersect entre les termes)
  • Avec un Highlight des termes dans la liste déroulante.


Exemple du site Jquery de l'autocomplet avec regexp


Mon problème est que si je tape un accent le match(/\w+/g) ne convient pas, et que si j'ai un accent dans ce que je remonte en Ajax, le Regexp ne fonctionne plus.


Pouvez vous m'aider ?

Merci beaucoup !

Voici le code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
57
58
59
$j('#id_auto').autocomplete({
	source : function(request, response) {
		$j.ajax({
			url : urlAuto,
			dataType : "json",
			type : "POST",
			data : {
				sid : sid,
				term : request.term
			},
			success : function(data) {
				taille = data.liste.length;
				if (taille) {
					data.liste.push({
						"information" : taille + " élément(s) sur un total de " + data.nombreTotal
					})
					response($j.map(data.liste, function(item) {
						if (item.information) {
							return {
								label : item.information,
								value : "",
								info : true
							}
						} else {
							term = $j.ui.autocomplete.escapeRegex(request.term);
							strRetour = (item.codeCim10 + " - " + item.libCim10Long);
							listeTerme = term.match(/\w+/g);
							for (var i = 0, j = listeTerme.length; i < j; i++) {
								itemTerm = listeTerme[i];
								strRetour = strRetour.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + itemTerm + ")(?![^<>]*>)(?![^&;]+;)", "gi"), "<strong>$1</strong>");
							};
							return {
								label : strRetour,
								value : item.codeCim10,
							}
						}
					}));
				} else {
					response([{
						label : "Il n'y a aucun élément correspondant à votre recherche",
						value : "val",
						info : true
					}]);
				}
			}
		});
	},
	minLength : 2,
	delay : 500,
	select : function(event, ui) {
		this.close
	}
}).data("autocomplete")._renderItem = function(ul, item) {
	if (item.info) {
		return $j("<li></li>").data("item.autocomplete", item).text(item.label).appendTo(ul);
	} else {
		return $j("<li></li>").data("item.autocomplete", item).append("<a>" + item.label + "</a>").appendTo(ul);
	}
};