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 :

Gestion du click avec le drag and drop


Sujet :

jQuery

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 141
    Par défaut Gestion du click avec le drag and drop
    Bonjour,

    Je me permet de revenir une nouvelle fois pour un nouveau problème dans mon code , ici que cela est indiqué dans mon titre j'ai un soucis avec la gestion du clic avec le drag and drop, je m'explique:

    En faite j'ai des éléments contenu dans une liste ceux-ci sont draggable via une fonction jquery ainsi je peu les deplacer de haut en bas, mon soucis viens du fais que je souhaite que c'est même éléments soit cliquable quand l'utilisateur n'est pas entrain de faire un drag and drop sur l'élément.

    Hors après quelque recherche j'ai compris qu'il fallait que je joue avec le .bind() est .unbind() pour rendre cliquable ou non mon élément.

    Après quelque test, j'obtients les résultats suivant:

    - Mon élément est cliquable mais lorsque l'on fait un drag and drop dessus ben il est aussi considérer comme cliquer

    - Mon élément est cliquable mais dès qu'on le bouge il n'est plus du tout cliquable

    En bref, en partant sur mon deuxième cas il ne me manquerais plus cas rendre mon élément à nouveau cliquable une fois le drag and drop fini et donc c'est la ou je coince, après plusieurs tentative et l'utilisation d'unn setTimeout() je n'arrive pas au résultat escompter .

    Un peu d'aide serait donc la bienvenu

    Voici d'ailleurs mon code;

    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
    //fonction appeller pour réactiver le clic de l'élément
    function click(elem){
    			$(elem).find(".item").bind('click',function f(){console.log('toto');})
    }
     
    (function($){
    $.fn.shoppingList = function(options) {
    		// Options par defaut
     
    	var defaults = {};
    	var options = $.extend(defaults, options);
     
    	this.each(function(){
     
    	var obj = $(this);
     
    	// Empêcher la sélection des éléments à la sourirs (meilleure gestion du drag & drop)
    		var _preventDefault = function(evt) { evt.preventDefault(); };
    		$("li").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault);
     
    			// Initialisation du composant "sortable"
    			$(obj).sortable({
    				axis: "y", /* Le sortable ne s'applique que sur l'axe vertical
    				containment: ".shoppingList", // Le drag ne peut sortir de l'élément qui contient la liste*/
    				handle: ".item", /* Le drag ne peut se faire que sur l'élément .item (le texte)*/
    				distance: 10, /* Le drag ne commence qu'à partir de 10px de distance de l'élément*/
     
                                    // Evenement appelé lorsque l'élément est relaché
    				stop: function(event, ui){
     
                                            // Pour chaque item de liste
    					$(obj).find("li").each(function(){
     
    						//$(this).find(".item").unbind('click');
    						// On actualise sa position
    						index = parseInt($(this).index()+1);
    						// On la met à jour dans la page
    						$(this).find(".count").text(index);
     
    						//Je désactive le click sur l'élément
    						$(this).find(".item").unbind("click");
    						txt = $(this).text().replace(/^\s+|\s+$/g,'');		
     
                                                    console.log(txt);
     
    					});
     
    				}
     
    			});
     
    			// Initialisation du composant Droppable
    			$(obj).droppable({
    				// Lorsque l'on relache un élément sur la poubelle
    				drop: function(event, ui){
    					/*Je lance ma fonction click au bout d'un temps donné après avoir lacher l'élément*/
    					 setTimeout("click($(this))",1000);
    				},
    				// Lorsque l'on passe un élément au dessus de la poubelle
    				over: function(event, ui){
     
     
    				},
    				// Lorsque l'on quitte la poubelle
    				out: function(event, ui){
    					//console.log("titi");
    				}
    			})
     
     
    			// Pour chaque élément trouvé dans la liste de départ
    			$(obj).find("li").each(function(){
     
     
    				// On ajoute les contrôles
    				addControls($(this));
    			});
     
    		});
     
     
     
     
    /*
    		* Fonction qui ajoute les contrôles aux items
    		* @Paramètres
    		*  - elt: élément courant (liste courante)
    		*
    		* @Return void
    		*/
     
    		function addControls(elt)
    		{	
     
     
     
     
     
    			// On ajoute en premier l'élément textuel
    			$(elt).html("<span class='item'>"+$(elt).text()+"</span>");
     
    			//Au clic sur lélément je le réactive 
    			$(elt).find(".item").bind('click',function f(){console.log('toto');})
    			// Puis l'élément de position
    			//var toto=parseInt($(elt).index()+1);
     
    			//$(elt).prepend('<span class="count">'+toto+'</span>');
     
    			// Au double clic sur le texte, ici si on peu y incorporer le slid menu si besoin
     
     
     
     
     
     
    		}
     
     
     
    		// On continue le chainage JQuery
    		return this;
    	};
    })(jQuery);
    Merci pour l'aide

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 141
    Par défaut
    Je vais faire mon boulet , mais après quelque recherche j'ai trouvé la solution
    en faite c'est dasn ma fonction clic créer je ciblais pas le bon éléments , ce qui nous donne après correction ceci:


    Code JQuery : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    function click(){
    			// la class item étant mes éléments daggable ett cliquable
    			$(".item").bind('click',function f(){console.log('toto');})
     
    		}

  3. #3
    Membre chevronné
    Avatar de Darkaurora
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2010
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 382
    Billets dans le blog
    1
    Par défaut
    Bon déjà tu appelles deux fois un unbind( 'click' ) sur ton élément.
    Je ne pense pas que cela est la bonne solution de jouer avec l'événement, un coup on active , un coup on désactive.
    Tu devrais initialiser tes événements une bonne fois pour toute et conditionner ton événement click , à savoir que si tu réalises un drag alors tu ne peux pas cliquer ton élément.

    Mets un flag pour définir si ton élément est en train d'être drag ou pas. Si oui alors ton événement click ne s'exécute pas si non fait autant de click que tu veux.

    De plus fait bien attention a bind et unbind, ne connaissant pas la version de ton jquery je ne te dirais pas de les modifier, mais il est toujours bon à savoir qu'ils sont déprécié en faveur de on et off

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 141
    Par défaut
    Citation Envoyé par Darkaurora Voir le message
    Bon déjà tu appelles deux fois un unbind( 'click' ) sur ton élément.
    Je ne pense pas que cela est la bonne solution de jouer avec l'événement, un coup on active , un coup on désactive.
    Tu devrais initialiser tes événements une bonne fois pour toute et conditionner ton événement click , à savoir que si tu réalises un drag alors tu ne peux pas cliquer ton élément.

    Mets un flag pour définir si ton élément est en train d'être drag ou pas. Si oui alors ton événement click ne s'exécute pas si non fait autant de click que tu veux.

    De plus fait bien attention a bind et unbind, ne connaissant pas la version de ton jquery je ne te dirais pas de les modifier, mais il est toujours bon à savoir qu'ils sont déprécié en faveur de on et off
    Tout d'abord pour le unbind et bind que j'ai placé dans mon code, celui-ci était loin d'être parfait puisqu'il s'agissait que d'un test et donc il est plus que probable de trouver des bouts de code inutile dans mon code car je n'ai pas encore fais le ménage dedans.$

    Sinon concernant on et off, n'ayant pas la dernière versoin de jquery pour le moment je campe sur le bind et unbind en attendant de faire les modif adéquate car pour le moment passer bind/unbond en on/off est loin d'être mes priorité car j'ai des bugs plus urgent à régler mais je garde sous le coude.

    En attendant merci quand même pour les conseils

  5. #5
    Membre chevronné
    Avatar de Darkaurora
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2010
    Messages
    382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 382
    Billets dans le blog
    1
    Par défaut
    C'était juste à titre d'information, je connais peut de choses alors je préfère les dires que de les oublier... Bonne continuation.

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

Discussions similaires

  1. problème d'encoding avec un drag-and-drop.
    Par Luke spywoker dans le forum GTK+ avec Python
    Réponses: 1
    Dernier message: 10/09/2014, 17h24
  2. Réponses: 1
    Dernier message: 19/02/2014, 20h17
  3. [WD16] Perte d'identifiant dans un arbre avec le drag and drop
    Par Francis D dans le forum WinDev
    Réponses: 0
    Dernier message: 05/04/2011, 11h22
  4. Réponses: 0
    Dernier message: 21/07/2010, 06h37
  5. Réponses: 1
    Dernier message: 29/04/2006, 16h55

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