11487 sujets

JavaScript, DOM et API Web HTML5

Pages :
(reprise du message précédent)

Résultat V X V
$("#utilisateursChoisis").val() is undefined

de la fonction checkForm() :
function checkForm(){
// le but de check form est de parcourir tous les elements
// de la liste de choix d'en extraire les valeurs et de les mettres dans un input
// on va les séparer ici dans cet exemple par des |
$("#liste2 option").each(function(){
$('#utilisateursChoisis').val($(this).val()+'|'+$('#utilisateursChoisis').val());
});
$('#utilisateursChoisis').val($('#utilisateursChoisis').val().slice(0, -1));
return true;
}
Je pensais donc que j'appelais mal JQuery alors je l'ai appelé autrement :
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>

Je l'appelle dans le script où se trouvent les fonctions déplacer() et checkform(), le formulaire et dans le script de récupération de "UtilisateursChoisis"
Sur ta page je dirais même plus dans ton formulaire es-tu bien sûr d'avoir cet
<input type="hidden" name="utilisateursChoisis"/> 
?

edit : ok j'ai compris mille excuses il faut rajouter l'attribut id
<input type="hidden" id="utilisateursChoisis" name="utilisateursChoisis"/> 

Modifié par Su4p (29 Apr 2011 - 15:46)
<input type="hidden" id="utilisateursChoisis" name="utilisateursChoisis"/> 


Voila je n'ai plus d'erreur disant UtilisateursChoisis is Undefined
mais il me retourne toujours une liste vide :s
par contre il me retourne une erreur : G is undefined dans une libraire JQuery, pourtant je l'importe de Google ... -_-
Bon alors j'ai testé et pour moi ça , ça marche :

 <?php

 print_r($_POST);

 ?>

<script type="text/javascript" src="  http://code.jquery.com/jquery-1.5.2.min.js"></script>  
<form name="formulaire" action="#" method="post"> 
	<input type="hidden" name="utilisateursChoisis" id="utilisateursChoisis"/>  
	<table>
		<tr> 
			<td align="center">
				<b><font size="2">Liste des utilisateurs : </font></b><br/> 
				<select align=top name="liste1" size=6  style="width:120px"> 
					<option value="user1">user1</option> 
					<option value="user2">user2</option> 
					<option value="user3">user3</option> 
					<option value="user4">user4</option> 
				</select> 
			</td> 
			<td align="center"> 
				<input type="button" value="Ajouter >>>" onClick="Deplacer(this.form.liste1,this.form.liste2)"/> 
				<br/><br/> 
				<input type="button" value="&lt;&lt;&lt; Enlever" onClick="Deplacer(this.form.liste2,this.form.liste1)"/> 
			</td> 
			<td align="center"><font size="2"><b>Utilisateurs à ajouter</b></font><br/> 
				<select align="top" name="liste2" id="liste2" size="6" style="width:120px"> 
					<option value="10">----------------------</option> 
				</select> 
			</td> 
		</tr>
	</table> 
	<script language="javascript"> 

	// Astuce pour Netscape qui ne supporte pas style="width:100" 
	// Donc : création d'une ligne pour initialiser la largeur puis suppression par ce javascript 
	document.formulaire.liste2.options.length=0; 

	</script> 
	<input type="submit" value="Valider" onclick="checkform()"/>  
</form> 
<script type="text/javascript">

function Deplacer(l1,l2) {   
                    if (l1.options.selectedIndex>=0) {   
                        o=new Option(l1.options[l1.options.selectedIndex].text,l1.options[l1.options.selectedIndex].value);   
                        l2.options[l2.options.length]=o;   
                        l1.options[l1.options.selectedIndex]=null;   
                    }else{   
                        alert("Aucun utilisateur a été sélectionné");   
                    }   
                }   
        //et check form  
        function checkform(){  
            // le but de check form est de parcourir tous les elements   
            // de la liste de choix d'en extraire les valeurs et de les mettres dans un input  
            // on va les séparer ici dans cet exemple par des |  
            $("#liste2 option").each(function(){  
                    $('#utilisateursChoisis').val($(this).val()+'|'+$('#utilisateursChoisis').val());   
                });   
            $('#utilisateursChoisis').val($('#utilisateursChoisis').val().slice(0, -1));   
            return true;  
        } 

</script>


j'ai testé tel quel dans un seul fichier.
Lorsque je fais un
print_r($_POST);


il me retourne :
Array ( [utilisateursChoisis] => Smiley groupe => 2 )


Si je ne me trompe pas cela veut dire que mon paramètre "utilisateursChoisis" est vide non ?
Modifié par mini-truc (29 Apr 2011 - 17:15)
Non pas si tu as une erreur "g is undefined" (que j'ai pas réussis à reproduire) ceci dit il y avait quand même quelques trucs à modifier pour que le script fonctionne.

Bref sinon parts du code de mon dernier post puisque qu'il marche à coup sûr (testé et approuvé) et ensuite fait les modifications que tu veux pour le traitement.
oui tu ne te trompes pas, néanmoins si tu as toujours une erreur dans ton javascript c'est normal.
Je suis vraiment désolé mais je ne comprends pas, je commence a désespérée -_-
J'ai recopié ton dernier code, j'ai modifié l'action du formulaire pour l'envoyer a var.php

dans lequel j'ai tout supprimé et écrit seulement :

$tab=explode('|',$_POST['utilisateursChoisis']); 
        foreach($tab as $idUser) 
        { 
                        // A la place du echo tu mettras ton traitement. 
            echo $idUser; 
        } 		
OMG ! Mais oui Smiley smile

Je fais un grand merci à Su4p !

Le code marche nickel je vais éditer le post pour publier la solution final Smiley smile
je te remercie il ne me reste plus qu'a faire une bonne requête d'insertion

merci encore je commençais à me décourager !!
Je voulais revenir sur le sujet : j'ai voulu reprendre ton idée de déplacer mais dans le but de déplacer toute ma liste de gauche vers la droite.

Voila ce que j'ai fait :
function Tous(l1,l2){
			while(l1.options=!null){
				o=new Option(l1.options.text,l1.options.value);    
                l2.options[l2.options.length]=o;    
                l1.options[l1.options]=null; 
			}
		}


Mon erreur, je pense vient de la construction de ma boucle je pense.
Voila ce que j'ai essayais de transcrire:
Tant que ma liste1 n'est pas vide faire
je récupère l'objet de ma liste 1
j'ajoute l'objet à ma liste 2
je retire l'objet de ma liste1
Fin tant que

Première erreur je ne passe pas à l'option suivante avant la fermeture de ma boucle ce qui fait que je bug mon navigateur Smiley smile
et deuxième erreur, je suis pas sur que la liste des options de gauche se récupère comme cela

J'espere que tu suits toujours le sujet Su4p Smiley cligne
Et ça ?

function Tous(l1,l2){ 
            var i =0;
			//pas fan de ta boucle while puisque on sait quand ça va se finir grace à .length
            for(i=0 ; i < l1.length ; i++ ){ 
                //si tu lui précises pas qu'elle option il doit créer il risque de pas comprendre
				// donc là on lui dit qu'on veut la i niéme 
                o=new Option(l1.options[i].text,l1.options[i].value); 
				//voila maintenant on la rajoute dans la liste 2 à la derniere position de la liste 2
                l2.options[l2.options.length]=o;     
				//pour finir on retire l'option qui se trouve dans la liste 1 à la i niéme position
                l1.remove(i);
            } 
        } 

pas testé mais à priori ça devrait te mettre sur la bonne voie[/i][/i]
Je pense qu'il doit manquer encore un petit détails, il déplace bien le nombre de toute la liste, donc la boucle est correcte, cependant ! il doit mal récupéré la valeur, car il m'affiche à droit "undefined" autant de fois qu'il y avait d'utilisateur à droite.
il manquait juste un à : o=new Option(l1.options[i].text,l1.options[i].value);
parcontre il ajoute tous à la liste sauf un.. je pensais que tout à l'heure il ne m'avait pas ajouté un champ parce que j'avais je l'avais séléctionné mais non ...
[/i][/i]
ha ben oui logique je te fait remarquer des choses que j'oublie :

//si tu lui précises pas qu'elle option il doit créer il risque de pas comprendre 
                // donc là on lui dit qu'on veut la i niéme  
                o=new Option(l1.options[i].text,l1.options[i].value); 
[/i][/i]
il manquait juste un à :
o=new Option(l1.options[i].text,l1.options[i].value); 

par contre il ajoute tous à la liste sauf un.. je pensais que tout à l'heure il ne m'avait pas ajouté un champ parce que j'avais je l'avais sélectionne mais non ...
on a remarqué l'erreur en même temps ^^

parcontre je viens de refaire un test et il saute une fois sur deux... donc on doit passer deux fois au champ suivant je pense... je continue de regarder... si t'as une idée ?
[/i][/i]
Modifié par mini-truc (03 May 2011 - 16:40)
Pages :