select multiple sans Ctrl

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : select multiple sans Ctrl

par zeus » 03 nov. 2006, 16:54

aux chevilles pas trop enflées ;)
Bah non, je pourrais plus intervenir :? :cry: :lol:

par Ryle » 03 nov. 2006, 15:38

La prochaine fois je spécifierais : bienveillant et aux chevilles pas trop enflées ;)

'ci m'sieur :)

par zeus » 03 nov. 2006, 14:45

...donc si un bienveillant modérateur passe dans le coin, battosai371 avait lui aussi trouvé la solution à son problème
Je savais que je serais reconnu à mon juste niveau un jour :langue:

par Ryle » 03 nov. 2006, 13:41

Oups, désolé, c'est devenu un reflexe :)
donc si un bienveillant modérateur passe dans le coin, battosai371 avait lui aussi trouvé la solution à son problème

par mcorgnet » 03 nov. 2006, 13:36

voui, mais ça n'est pas moi qui avais créé le post, je l'ai repris parce qu'il correspondait à mon problème :d

voui, faut le tagger en résolu

par Ryle » 03 nov. 2006, 12:37

[Résolu] :?: :wink:

par mcorgnet » 03 nov. 2006, 12:20

Ca marche :d

j'avais pas pensé à l'id.

Merci beaucoup, je planchais là dessus depuis hier après midi ...

par Ryle » 03 nov. 2006, 11:52

Comme l'a dit Sadeq, met des crochets seulement dans le nom et pas dans l'id et utilise ce dernier pour faire appel à ton select, cela devrait mieux fonctionner :)

Sinon tu dois également pouvoir passer par le tableau elements en spécifiant le nom du select comme une chaine de caractères :

Code : Tout sélectionner

this.form.elements["myChildId[]"]

par mcorgnet » 03 nov. 2006, 11:17

ben j'ai dit une bêtise ?

par mcorgnet » 02 nov. 2006, 18:16

Je relance ce poste, j'ai un dilemne :

je déplace, à l'aide de javascript, des valeurs entre mes champs select.

ça fonctionne très bien, sauf quand je leur mets des crochets pour indiquer le tableau ...

donc si je fais ça, ça tourne :

Code : Tout sélectionner

onClick="Deplacer(this.form.myUsers,this.form.myChildId,'Aucun utilisateur selectionne')"
mais si je fais ça, ça tourne plus du tout :

Code : Tout sélectionner

onClick="Deplacer(this.form.myUsers,this.form.myChildId[],'Aucun utilisateur selectionne')"
c'est ce qu'on appelle un dilemne non ?

par battosai371 » 14 juin 2006, 14:00

C'est bon j'ai trouvé.
En faite, j'ai relu correctement le site et j'ai eu une réponse de l'auteur.
Il y avait un pb entre le id et l'appel à la fonction. Il m'a donc conseillé de changer le nom de l'id et ça roule !

Voici le code pour ceux que ça intéresse :

Code : Tout sélectionner

<form name="form" action="valide_test.php" method="post" > <select name="intervenants[]" multiple="multiple" size="5" id="selection" onchange="sel(this.selectedIndex);"> ..... choix de la liste .... <script type="text/javascript"> nb=document.getElementById("selection").options.length; tabsel=Array(nb); function sel(val) { (val>=0)?tabsel[val]=!tabsel[val]:tabsel=Array(nb); for (i=0;i<nb;i++) document.getElementById("selection").options[i].selected=tabsel[i]; } </script> <input type="submit" value="Envoyer" class="bouton"/> </form> Voilà, Merci pour vos reponses @+ Faudra mettre le tag resolu

par sadeq » 14 juin 2006, 10:31

Voici une adaptation sérieuse du dit script js dans le cadre d'un script php qui reçoit les valeurs de la liste multiselection.

En fait, oui il faut nommer la liste foo "avec []" pour pouvoir la récupèrer sous php sous forme de tableau qui contient toutes les valeurs sélectionnées.

Je dit bien le "name" et non le "id"

car le "id" de la liste est utilisé par javascript pour appliquer la sélection mais le "name" est utilisé par le formulaire d'envoi de données à php.

Php reçoit donc les "name" des champs du formulaire. si un champ de formulaire se termine par [] php le concidère comme un tableau.

Voici le script PHP : liste.php.
<?php 
	//Réception des valeurs de la liste multiselect 
         //Affichage pour le test
	echo "<pre>";
	print_r($_GET["foo"]); //foo est le "name" de la liste
	echo "</pre>";
?>
<form>
<p>
Sélectionnez plusieurs couleurs :
<p>
<select name="foo[]" multiple="multiple" size="5" id="sel" onchange="select(this.selectedIndex);">
    <option value="white">Blanc</option>
    <option value="blue">Bleu</option>
    <option value="black">Noir</option>
    <option value="red">Rouge</option>
    <option value="green">Vert</option>
    <option value="yellow">Jaune</option>
    <option value="brown">Marron</option>
    <option value="violet">Violet</option>
    <option value="orange">Orange</option>
    <option value="gray">Gris</option>
  </select>
<p><input type=submit name=envoyer value="Envoyer"></p>  
</form>
<script type="text/javascript">
// Select multiple à mémoire par Renaud Jacumin http://madinrno.free.fr
nb=document.getElementById("sel").options.length;
tabsel=Array(nb);
function select(val) {
  (val>=0)?tabsel[val]=!tabsel[val]:tabsel=Array(nb);
  for (i=0;i<nb;i++) document.getElementById("sel").options[i].selected=tabsel[i];
}
</script>

par guilt92 » 14 juin 2006, 10:18

Le principe est que tu ne peux pas faire passer un tableau en paramètres.
Je te conseille personnellement de récupérer les valeurs dans une chaine de caractère que tu mets dans un champ caché, et de récupérer cette chaine dans la page suivante pour la reconvertir en tableau.

Si tu modifies ton bout de code :

Code : Tout sélectionner

<script type="text/javascript"> <!--/*--><![CDATA[//> <!-- nb=document.getElementById("sel").options.length; tabsel=Array(nb); function sel(val) { (val>=0)?tabsel[val]=!tabsel[val]:tabsel=Array(nb); for (i=0;i<nb;i++) document.getElementById("sel").options[i].selected=tabsel[i]; var text_test = ""; for(i=0;i<tabsel.length;i++) { if(tabsel[i]) text_test += document.getElementById("sel").options[i].value+";"; } var champ=document.getElementById("champ_cache"); champ.value = text_test; } //--><!]]> </script>
Si tu as dans un formulaire un champ :

<input type="hidden" id="champ_cache" name="champ_cache"/>

Alors ce champ contiendra toujours toutes les valeurs selectionnées, séparées par un ; .

Dans la page en php ou tu récupère $_POST["champ_cache"] tu pourras utiliser la fonction implode() pour recréer un tableau si nécessaire.

J espere que cela te sera utile.

EDIT : J'ai remarqué que si tu mettais le SELECT et le script entre des balises <form></form> alors cela ne marche plus, il faut donc le faire à part et mettre uniquement le champ caché (et les autres données si il y en a) dans le <form>

select multiple sans Ctrl

par battosai371 » 14 juin 2006, 09:42

Bonjour,

J'ai suivi ce tuto :

http://madinrno.free.fr/index.php?go=memoselect

Cela fonctionne très bien sauf si on souhaite passer les valeurs sélectionnées dans une page de récupération en php.
En effet, dans le select, il n'y a pas les "[]" dans le name...
Donc, c'est utile ça évite la touche "ctrl" mais comment faire pour passer les valeurs choisies ? Car dès l'instant qu'on rajoute les "[]" dans le name du select, ça ne fonctionne plus.

Si qqun peut m'aider, je suis preneur.
Merci !