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

jQuery Discussion :

Supprimer un élément sur un drop out


Sujet :

jQuery

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 83
    Par défaut Supprimer un élément sur un drop out
    Bonjour!

    J'essaye de "maitriser" un petit peu le framework jQuery est j'ai un petit souci.

    J'ai deux listes, une liste "source" (catalog) et un liste "cible" (cart) que l'on peut trié pour mettre en ordre.

    Le problème, c'est qu'une fois que j'ai mis un élément de la liste source dans la liste cible, je ne peux plus l'en enlever...
    Or si l'utilisateur fais une erreur, j'aimerais qu'il puisse revenir en arrière sans avoir a faire F5 et tout recommencer...

    Voici mon code JS :
    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
     
    <script type="text/javascript">
    	$(function() {
    		$("#catalog").accordion();
    		$("#catalog li").draggable({
    			appendTo: "body",
    			helper: "clone"
    		});
    		$("#cart ol").droppable({
     
    			activeClass: "ui-state-default",
    			hoverClass: "ui-state-hover",
    			accept: ":not(.ui-sortable-helper)",
    			drop: function(event, ui) {
    				var IDEcran = "<li id=\"" + ui.draggable.context.id + "\"></li>";
    				$(this).find(".placeholder").remove();
    				$(IDEcran).text(ui.draggable.text()).appendTo(this);
    			}
    		}).sortable({
    			items: "li:not(.placeholder)",
    			sort: function() {
    				// gets added unintentionally by droppable interacting with sortable
    				// using connectWithSortable fixes this, but doesn't allow you to customize active/hoverClass options
    				$(this).removeClass("ui-state-default");
     
    			}
    		});
     
    	});
    	</script>
    Tout droit sorti (ou presque, quelque petite modifs venant de moi quand même) du site de jquery: http://jqueryui.com/demos/droppable/#shopping-cart



    Auriez vous une idée de comment je pourrais faire pour pouvoir supprimer un élément de la liste "cart"?

    Merci!

    Si besoin de plus d'information sur le code, n'hésitez pas à me demander.

    Cordialement

    Grégory

    Jpa75

  2. #2
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut
    Bonsoir.

    Je viens de découvrir cette démonstration, un ajout de la version 1.8.1 ou 1.8.2, que je ne connaissais pas encore.

    Si je comprends bien, il s'agit d'une liste de produits et d'un panier d'achats. Il est donc logique que l'on ne puisse pas déplacer un produit du panier vers la liste des produits.

    Reste à offrir la possibilité d'annuler un choix, exemple :

    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
    152
    153
    154
    155
    156
    157
    158
    <!doctype html>
    <html lang="fr">
    <head>
    	<meta charset="utf-8">
    	<meta name="Author" content="Daniel Hagnoul">
    	<title>Forum jQuery</title>
    	<link rel="stylesheet" type="text/css" href="../lib/jqueryui/css/humanity/jquery-ui-1.8.2.custom.css">	
    	<style>
    		/* BASE */
    		body {
    			background-color:#dcdcdc;
    			color:#000000;
    			font-family:sans-serif;
    			font-size:medium;
    			font-style:normal;
    			font-weight:normal;
    			line-height:normal;
    			letter-spacing:normal;
    		}
    		h1,h2,h3,h4,h5 {
    			font-family:serif;
    		}
    		div,p,h1,h2,h3,h4,h5,h6,ul,ol,dl,form,table,img {
    			margin:0px;
    			padding:0px;
    		}
    		p {
    			padding:6px;
    		}
    		ul,ol,dl {
    			list-style:none;
    			padding-left:6px;
    			padding-top:6px;
    		}
    		li {
    			padding-bottom:6px;
    		}
    		div#conteneur {
    			width:95%;
    			height:500px;
    			margin:12px auto;
    			padding:6px;
    			background-color:#FFFFFF;
    			color:#000000;
    			border:1px solid #666666;
    			font-size:0.8em;
    		}
     
    		/* TEST */
    		h1 { padding: .2em; margin: 0; }
    		#products { float:left; width: 500px; margin-right: 2em; }
    		#cart { width: 200px; float: left; }
    		#cart ol { margin: 0; padding: 1em 0 1em 3em; }
    	</style>
    	<script charset="utf-8" src="../lib/jqueryui/js/jquery-1.4.2.min.js"></script>
    	<script charset="utf-8" src="../lib/jqueryui/js/jquery-ui-1.8.2.custom.min.js"></script>
     	<script>
    		$(function(){
    			var objPanier = null;
     
    			$('#dialog').dialog({
    				autoOpen: false,
    				modal: true,
    				width:400,
    				show: 'blind',
    				hide: 'explode',
    				buttons: {
    					"Retirer": function() {
    						$(objPanier).remove();
    						$(this).dialog('close');
    					},
    					"Conserver": function() {
    						objPanier = null;
    						$(this).dialog('close');
    					}
    				}
    			});
     
    			$("#catalog").accordion();
     
    			$("#catalog li").draggable({
    				appendTo: "body",
    				helper: "clone"
    			});
     
    			$("#cart ol").droppable({
    				activeClass: "ui-state-default",
    				hoverClass: "ui-state-hover",
    				accept: ":not(.ui-sortable-helper)",
    				drop: function(event, ui) {
    					$(this).find(".placeholder").remove();
     
    					$("<li></li>").text(ui.draggable.text()).appendTo(this);
    				}
    			}).sortable({
    				items: "li:not(.placeholder)",
    				sort: function() {
    					$(this).removeClass("ui-state-default");
    				},
    				stop: function(event, ui) {
    					objPanier = ui.item;
    					$("#dialog").dialog('open');
    				}
    			});
    		});
    	</script>
    </head>
    <body>
    	<div id="conteneur">
     
    		<div id="products">
    			<h1 class="ui-widget-header">Products</h1>	
    			<div id="catalog">
    				<h3><a href="#">T-Shirts</a></h3>
    				<div>
    					<ul>
    						<li>Lolcat Shirt</li>
    						<li>Cheezeburger Shirt</li>
    						<li>Buckit Shirt</li>
    					</ul>
    				</div>
    				<h3><a href="#">Bags</a></h3>
    				<div>
    					<ul>
    						<li>Zebra Striped</li>
    						<li>Black Leather</li>
    						<li>Alligator Leather</li>
    					</ul>
    				</div>
    				<h3><a href="#">Gadgets</a></h3>
    				<div>
    					<ul>
    						<li>iPhone</li>
    						<li>iPod</li>
    						<li>iPad</li>
    					</ul>
    				</div>
    			</div>
    		</div>
     
    		<div id="cart">
    			<h1 class="ui-widget-header">Shopping Cart</h1>
    			<div class="ui-widget-content">
    				<ol>
    					<li class="placeholder">Add your items here</li>
    				</ol>
    			</div>
    		</div>
     
    		<div id="dialog" title="Confirmer votre choix">
    			<p>
    				Souhaitez-vous conserver ou retirer cet article du panier ?
    			</p>
    		</div>
     
    	</div>
    </body>  
    </html>

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 83
    Par défaut
    En effet il est logique qu'il ne puisse pas déplacer un objet du panier vers la liste des objets, mais est-il possible, par exemple, d'imaginer une 3ème liste "corbeille"?

    Sinon, il y a la fonction "out" mais celle-ci s'exécute dès que l'on sort de la liste.
    Il n'existe pas de fonction "dropout"?

    Je vais jeté un oeil a ce que tu proposes en attendant.

    Merci =)

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 83
    Par défaut
    Voila comment j'ai finalement fais, au cas où cela servirai pour quelqu'un d'autre:

    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
    $(function() {
    		var monObjet = null;
    		$("#catalog").accordion();
    		$("#catalog li").draggable({
    			appendTo: "body",
    			helper: "clone"
    		});
    		$("#cart ol").droppable({
    			activeClass: "ui-state-default",
    			hoverClass: "ui-state-hover",
    			accept: ":not(.ui-sortable-helper)",
    			drop: function(event, ui) {
    				var IDEcran = "<li id=\"" + ui.draggable.context.id + "\"></li>";
    				$(this).find(".placeholder").remove();
    				$(IDEcran).text(ui.draggable.text()).appendTo(this);
    			}
    		}).sortable({
    			items: "li:not(.placeholder)",
     
    			sort: function() {
    				// gets added unintentionally by droppable interacting with sortable
    				// using connectWithSortable fixes this, but doesn't allow you to customize active/hoverClass options
    				$(this).removeClass("ui-state-default");
     
    			},
    			out: function(event, ui) { // Si je sors un objet de la liste des objets choisi, je le stock en mémoire.
    				monObjet = ui.item;
    			}
    		});
     
    		$("#corbeille").droppable({ // nouvelle liste droppable
    			drop: function(event, ui) {
                                    // Si j'y drop un objet, je le supprime
    				if(confirm("Etes vous sur de vouloir le supprimer?")) {
    					monObjet.remove(); 
    				}
    			}
    		});
     
    	});
    Merci danielhagnoul, ta réponse m'a été très utile

  5. #5
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 10
    Par défaut Jquery
    Bonjour,

    J'utilise le même script mais je n'arrive pas à récupérer le contenu du "panier" après avoir validé mon FORM ... Pourriez vous m'aider ?

    Merci d'avance.

    X9

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 83
    Par défaut
    Of course...

    Ma liste (ol) a pour id "ecranAffiche".

    J'ai un bouton sur lequel j'appuie et qui exécute ce script:

    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
     
    function fonctionClick() { // Fonction appelé lors du clic sur le bouton
    				var selectedOptionsArray = $('#ecranAffiche').sortable('toArray'); // Mise en tableau du contenu de la liste ecranAffiche
    				var url = "../Layout/insertionOrdre.php?"; // Préparation de l'url pour l'appel ajax
    				url = url + "id" + 1 + "=" + selectedOptionsArray[0]; // Ajout dans l'url de l'ID numero 1.
     
    				if(selectedOptionsArray.length == 0){ // Si aucun ecran dans la liste
    					alert('Aucun ecran n\'est sélectionné. Vous ne pouvez donc pas valider!'); // Message d'alert et fin du script
    				}
    				else { // Si au moins un écran dans le script
    					for(var no=1; no<selectedOptionsArray.length; no++){ // On boucle sur les écrans restant (sauf le premier)
    						url = url + "&id" + (no+1) + "=" + selectedOptionsArray[no];  // Et on rempli l'url pour l'appel ajax
    					}
    					$.get(url, function(data) // Appel ajax vers l'url préparer.
    						{
    							if (data == 1) { // Si ca retourne 1, c'est que cela a fonctionné
    								alert("La mise en place du nouvel ordre d'affichage s'est bien déroulée");
    							}
    							else { // Sinon, c'est que cela à échoué.
    								alert("La mise en place du nouvel ordre d'affichage a échouée. Veuillez nous excuser pour la gène occasionnée");
    							}
    						}); // fin de l'appel ajax
    				}//fin du ELSE   "// Si au moins un écran dans le script"
              }
    Tu récupère l'ordre des écrans lorsque tu crées le tableau.

    Derrière je fais un appel ajax pour enregistrer mes écrans dans une BDD. Tu n'en as peut-être pas besoin.

    Si tu as besoin de plus de précision, n'hésite pas

    Cordialement

    Mister Jpa

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 83
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    		$("#corbeille").droppable({ // nouvelle liste droppable
    			drop: function(event, ui) {
                                    // Si j'y drop un objet, je le supprime
    				if ( monObjet == null ) {
                                            if(confirm("Etes vous sur de vouloir le supprimer?")) {
    					      monObjet.remove(); 
    				        }
                                    }
    			}
    		});
    Ce code fonctionne sur FireFox et Chrome.
    Mais sur IE, il plante.
    Auriez vous une idée?

    J'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    monObjet.parentNode.removeChild(monObjet);
    Mais cela ne marche pas.

    Merci d'avance

    Cordialement
    Mister Jpa

Discussions similaires

  1. [array] supprimer un élément qui n'est pas le dernier
    Par SpaceFrog dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 16/04/2008, 20h41
  2. Supprimé des éléments vide d'un tableau
    Par shinux2004 dans le forum Langage
    Réponses: 4
    Dernier message: 04/07/2005, 19h40
  3. Supprimer un élément d'une TObjectList
    Par Lung dans le forum Langage
    Réponses: 15
    Dernier message: 30/05/2005, 17h32
  4. 2 éléments sur une même ligne
    Par ben_iap dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 24/11/2004, 17h27
  5. Supprimer un élément d'un tableau
    Par CaptainChoc dans le forum Langage
    Réponses: 15
    Dernier message: 23/12/2002, 23h14

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