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 :

Select Multiple sans utiliser CTRL


Sujet :

JavaScript

  1. #1
    Membre régulier
    Inscrit en
    Juin 2009
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 122
    Points : 83
    Points
    83
    Par défaut Select Multiple sans utiliser CTRL
    Bonjour à vous,

    J'ai recherché ici sur le FORUM mais je n'ai pas trouvé.
    Le SUJET dit tout. Ce que j'ai trouvé sur le WEB fonctionne bien quand on part de rien dans la liste.
    Quand je reviens pour modifier, ce que j'avais enregistré est sélectionner dans la liste, mais lorsque je clique sur un autre pour un ajout ce qui étaient sélectionnés disparait et je dois tout recommencer à zéro.

    Le dernier script que j'ai est le suivant :

    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
    // Variables we need
    var previous	= new Array();
    var lastClicked = '';
     
    // We are going to attach event listeners, no code at the bottom or anything hard coded...
    function addEvent(obj, evType, fn)
    { 
    	if(obj.addEventListener)
    	{
    		obj.addEventListener(evType, fn, false);
    		return true;
    	}
    	else if(obj.attachEvent)
    	{
    		var r = obj.attachEvent('on' + evType, fn);
    		return r;
    	}
    	else
    	{
    		return false; 
    	} 
    }
     
    // Let's begin when the DOM is ready
    addEvent(window, 'load', begin);
     
    // Attach the handlers to our selects
    // Attach the handlers to our selects
    function begin()
    {
    	var selects = document.getElementsByTagName('select');
     
    	for(var i = 0; i < selects.length; i++)
    	{
    		if(selects[i].multiple == true)
    		{
    			addEvent(selects[i], 'click', whichElement);
    			addEvent(selects[i], 'click', addRemoveClicked);
    		}
    	}
    }
    // We add a couple of handlers to each
    function addSelect(id)
    {
    	var sel = document.getElementById(id);
    	addEvent(sel, 'click', whichElement);
    	addEvent(sel, 'click', addRemoveClicked);
    }
     
    // Find which element we are looking at on this click
    function whichElement(e)
    {
    	if(!e)
    	{
    		var e = window.event;
    	}
    	if(e.target)
    	{
    		lastClicked = e.target;
    	}
    	else if(e.srcElement)
    	{
    		lastClicked = e.srcElement;
    	}
    	if(lastClicked.nodeType == 3) // Safari bug
    	{
    		lastClicked = lastClicked.parentNode;
    	}
    }
     
    // Make sure we are displaying the correct items
    function addRemoveClicked(e)
    {
    	if(!previous[this.id])
    	{
    		previous[this.id] = new Array();
    	}
    	// Remember what has been used
    	if(previous[this.id][lastClicked.value] == 1)
    	{
    		previous[this.id][lastClicked.value] = 0;
    	}
    	else
    	{
    		previous[this.id][lastClicked.value] = 1;
    	}
    	var selectBox = document.getElementById(this.id);
     
    	// Add correct highlighting
    	for(var i = 0; i < selectBox.options.length; i++)
    	{
    		selectBox.options[i].selected = '';
     
    		if(previous[this.id][selectBox.options[i].value] == 1)
    		{
    			selectBox.options[i].selected = 'selected';
    		}
    	}
    }
    Mon Select Multiple est le suivant :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select name="invites[]" size="25" multiple="MULTIPLE" id="invites" style="width:250px;">
    <?php 
    do {
    ?>
            <option value="<?= $row_membre['no_membre']; ?>"<?php if (in_array($row_membre['no_membre'], $_SESSION['invites'])) echo "selected='selected'"; ?>><?= stripslashes($row_membre['prenom']) . ' ' . stripslashes($row_membre['nom']); ?></option>
    <?php 	
    } while ($row_membre = mysql_fetch_assoc($dem_membre)); 
    ?>
    </select>

    Ce petit bout de code me permet d'avoir en selection ce qui est enregistré.

    Ceux et celles qui utiliseront cet interface ne sont pas des habitués, donc ca doit être le plus simple possible.

    Merci
    Sylvain

  2. #2
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    sur mon navigateur pas besoin de CTRL+Click
    et sur mon autre navigateur pour aveugle il n'y a même pas de click

    cette petite boutade pour te dire que l'objet liste est une implémentation interne du navigateur.
    que la façon de sélectionner plusieurs éléments ou d'ajouter des élément à une sélection ne dépends que du navigateur et de l'OS.
    FF et Chrome n'ont pas la même façon de faire sur Windows, Linux ou Mac.

    en général les fabricants de navigateur respectent les règles d'ergonomie de l'OS. le but est que l'utilisateur soit en terrain connu
    sous windows toutes les liste à choix multiples (widget windows) fonctionnent ainsi. (il y a malheureusement des développeurs qui n'utilisent pas le widget de base et font ce qu'ils veulent) l'utilisateur peux donc facilement apprendre à se servir de tous les soft parce qu'un menu rest une menu et une liste à choix multiple une liste.

    mieux vaut ne pas changer ça pour ne pas perturber l'utilisateur. de plus ton code fonctionnera peut-être sois windows mais sur mac ça n'aura aucun sens.

    si la liste à choix multiple ne te convient pas fais un div scrollable avec des case à cocher l'utilisateur n'est pas perturbé car les cases sont des case et tu auras ton truc en un click comme tu le veux

    A+JYT

Discussions similaires

  1. select multiple sans utiliser le ctrl
    Par tntneo dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 06/04/2009, 15h16
  2. ajouter des éléments a un select multiple sans effacer le contenu
    Par ziad251 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 05/05/2008, 15h11
  3. Récupération des valeurs select multiple sans sélection
    Par akara dans le forum Général JavaScript
    Réponses: 22
    Dernier message: 17/07/2007, 19h10
  4. [SELECT] multiselection sans utiliser la touche ctrl
    Par Pompil dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 13/05/2005, 10h51

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