IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

[AJAX] autocomplétion avec Ajax


Sujet :

JavaScript

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté

    Avatar de mlny84
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    4 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 4 023
    Par défaut [AJAX] autocomplétion avec Ajax
    Bonjour,

    J'effectue un module de recherche avancée pour mon site.
    Je gère 3 types de documents : notices, brèves et illustrations.
    L'interface "d'accueil" est donnée sur l'image1 donnée en PJ.
    L'utilisateur peut ajouter les critères qu'il souhaite par le menu déroulant.

    Je gère les champs ajoutés selon 2 méthodes : une avec une liste directe des champs obtenu (méthode addSelection), et une autre avec l'autocomplétion (méthode addAutocompletion).

    Je voudrais gérer la recherche par commune par l'autocomplétion.
    Mon problème : ma méthode fonctionne pour les notices, mais pas pour les brèves ou les illustrations (j'expose ici surtout le problème avec les brèves).
    Cf image2 et image2bis.

    J'ai installé Firedebug, et on voit bien que dans le cas des brèves, la requête Ajax est vide.

    J'ai essayé de tester la recherche par commune avec mon autre méthode : addSelection (Cf image3) et là pas de problèmes, ça marche avec les notices, les brèves et les illustrations. C'est pourquoi je pense que le problème vient d'Ajax.

    Je ne comprends pas pourquoi mon autocomplétion ne fonctionne pas avec mes brèves. Quelqu'un a une idée ?

    Mon code Javascript (version simplifiée):
    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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
     
    //J'attends que la page soit chargée
    var n=0;
    Event.observe(window,'load', initEventListener);
     
    // initialisation : on surveille les clic de l'utilisateur
    function initEventListener() {
    	Event.observe('add_button', 'click', addField);
    	Event.observe('valid', 'click', validForm);
    }
     
    //J'ai simplifié ma fonction, mais je n'ai pas que les communes dans ma liste.
    function addField() {
    	var champ = $F("add_field");
     
            if (champ == 'fcommune') { //Champ commun : selon les cases cochées, on rajoute les choix (c'est là que si je fais AddSelection aulieu de addAutocompletion, ça marche...
    		box = document.getElementById('notices');
    		if(box.checked){
    			addAutocompletion('fcommune', "Commune (notices)");
    		}
    		box = document.getElementById('breves');
    		if(box.checked){
    			addAutocompletion('fbrcommune', "Commune (brèves)");
    		}
    		box = document.getElementById('illus');
    		if(box.checked){
    			addAutocompletion('ficommune', "Commune (illustrations)");
    		}
    	}
     
     
     
    // ajout d'un champ d'autocomplétion : d'abord je rajoute mes champs pour le "graphique" ensuite je fais ma requête Ajax
    function addAutocompletion (champ, intitule) {
    	tbody = $('ajout');
    	tr = Builder.node('tr', {id: n+'_tr'}, [
    			addBoolean(champ),
    			Builder.node('td',[intitule]),
    			Builder.node('td',[
    				Builder.node('input', {id: n+'_'+champ+'-choice', name: n+'_'+champ+'-choice', type: 'text', value: '', size: '50'}),
    				Builder.node('div', {id:'suggestion', className: 'autocompletion recherche_champ', style:'display:none'})
    			]),
    			Builder.node('td',[
    				Builder.node('select', {
    					className: 'choix',
    					name: n + '_' + champ + '-chosen', 
    					id:n + '_' + champ + '-chosen', 
    					style: 'width: 100%; max-width: 100%;',
    					size: 5,
    					multiple: 'true',
    					className: 'recherche_liste',
    					onclick: 'delOption('+n+',\''+champ+'\',0)'
    				})
    			]),
    			Builder.node('td', [
    				Builder.node('input', {className: 'bouton', type: 'button', value: '-', onclick: 'removeElement('+n+')'})
    			])
    		]);
    	tbody.appendChild(tr);
    	var params = 'field='+champ+'&id='+n+'_'+champ+"-choice";
    	autocompletion = new Ajax.Autocompleter(n+'_'+champ+'-choice',
    						'suggestion',
    						'autocompletion',
    						{updateElement: updateList,
    						parameters: params});	
    }
     
     
     
    // mise à jour de la liste li
    function updateList(li) {
    	var id = li.up('div').previous().id;
    	Field.clear(id);
    	var select = $(id.replace("-choice", "-chosen"));
    	var text = li.down("span.value").innerHTML;
    	addOption(select,text);
    }
     
     
    // Ajout d'une option
    function addOption(select, text) {
    	var suivant = null;
    	var optionExist = false;
    	for(var i=0; i<select.options.length; i++) {
    		if(select.options[i].value == text) {
    			optionExist = true;
    			break;
    		} else if(select.options[i].value.toLowerCase() > text.toLowerCase()) {
    			suivant = select.options[i];
    			break;
    		}
    	}
    	if(!optionExist) {
    		option = Builder.node('option', {value: text, selected: 'selected'},[text]);
    		if(suivant !== null) {
    			select.insertBefore(option,suivant);
    		} else {
    			select.appendChild(option);
    		}
    	}
    }
     
     
    //Pour info, ma méthode addSelection : 
    // ajout une liste à sélection
    function addSelection (champ, intitule) {
    	tbody = $('ajout');
    	tr = Builder.node('tr', {id: n+'_tr'}, [
    			addBoolean(champ),
    			Builder.node('td',[intitule]),
    			Builder.node('td', [
    				Builder.node('select', {
    					name: n + '_' + champ + '-choice', 
    					id:n + '_' + champ + '-choice', 
    					style: 'width: 100%; max-width: 100%;',
    					size: 5,
    					multiple: 'true',
    					onclick: 'swap('+n+',\''+champ+'\',0)'
    				})
    			]),
    			Builder.node('td', [
    				Builder.node('select', {
    					name: n + '_' + champ + '-chosen', 
    					id:n + '_' + champ + '-chosen', 
    					style: 'width: 100%; max-width: 100%;',
    					size: 5,
    					multiple: 'true',
    					className: 'recherche_liste',
    					onclick: 'swap('+n+',\''+champ+'\',1)'
    				})				
    			]),
    			Builder.node('td', [
    				Builder.node('input', {className: 'bouton', type: 'button', value: '-', onclick: 'removeElement('+n+')'})
    			])
    		]);
      	tbody.appendChild(tr);
      	var num = n; /* afin d'éviter le décalage entre la variable global n et le temps de réponse d'ajax */
     
    	ajax = new Ajax.Request('listTerms.ajax', 
    		{
    			method: 'post',
    			parameters: $H({'field': champ}).toQueryString(),
    			onSuccess: function(request) {
    				options = request.responseText.substring(request.responseText.indexOf("<select>")+8,request.responseText.indexOf("</select>")-1);
    				$(num + '_' + champ + '-choice').update(options);
     
    			},
    		}
    	);
     
    }
    S'il vous faut d'autres renseignements, n'hésitez pas .
    Merci d'avance à ceux qui réfléchiront à mon problème.
    Fichiers attachés Fichiers attachés

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AJAX] Autocomplétion avec ajax et C#
    Par Kira77 dans le forum AJAX
    Réponses: 5
    Dernier message: 06/12/2012, 11h11
  2. [AJAX] autocomplétion avec ajax et php
    Par timmy1 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 07/06/2007, 16h28
  3. [AJAX] PHP avec ajax(makerequest)
    Par Benjiijneb dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 11/04/2006, 16h53
  4. [AJAX] Modifier avec AJAX une image générée avec GD
    Par thsantac dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 27/03/2006, 19h34
  5. [AJAX] Autocomplétion + méthode Ajax
    Par seblo_scoqi dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 26/10/2005, 16h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo