11548 sujets

JavaScript, DOM et API Web HTML5

bonjour,
je cherche à savoir si il est possible d'enlever et remettre un bind de jQuery dans le contexte suivant


//pseudo code

$(selecteur1).bind('dblclick', function(event)   {
    // annuler le bind dblclick de selecteur1
    instructions.....
    instructions.....
    instructions.....
          $(selecteur2).bind('change', function(event)  {
          instructions.....          
          instructions.....  
          // remettre le  bind dblclick de selecteur1
          une_fonction_quelconque();
          }
}


En gros je pose un écouteur de double click sur selecteur1 (une <td> de tableau). Une fois cliqué, je lui intègre un textarea (selecteur2) avec wrapinner et je peux ainsi modifier le champ.
sur l’événement 'change' du textarea (selecteur2) j’appelle une_fonction_quelconque() pour faire la mise à jour dans une base données.

ça fonctionne bien mais je voudrais que: dès qu'on a fait un double click sur sélecteur1, le double click n'ait plus d'effet sur ce sélecteur1 jusqu'à ce qu'on appelle une_fonction_quelconque(). Tout ça parce que j'ai des instructions qui rétablissent le <td> précédemment modifié dès que je double-clique sur un autre<td>

je sais pas comment faire.
Modifié par lionel_css3 (05 Jan 2012 - 14:49)
Tu ne peux pas te contenter d'une variable à vérifier ?


// definit ta variable
var dbc = true;

$(selecteur1).bind('dblclick', function(event)   {

  if (dbc == true) {
    dbc = false;
    // instructions....

          $(selecteur2).bind('change', function(event)  {
            // instructions.....          

            // remettre le  bind dblclick de selecteur1
            dbc = true;

          });
  }
});
ça marche, Kénor, ça bloque bien de manière temporaire la réponse au double click, comme je le voulais.

après, j'ai un autre problème...si je sors du champs sans le modifier, donc sans générer l'événement 'change', alors je ne peux plus utiliser le double click (ce qui est normal)

j'ai essayer de trigger l'événement blur, comme ceci

		$(selecteur2).bind('blur', function(event) {
		dbc = true;
                alert("blur");
		});


mais ça marche pas.... même une commande alert() ne passe pas, comme si l'événement blur n'était pas détecté...
Je n'ai pas la situation entière, donc difficile de te dire exactement ce que ça peut être.

Ceci étant, si j'ai bien compris, tu double clic sur un élément, ça remplace l'élément en question par un formulaire pour modifier le texte par exemple ? Si c'est bien ça, lors de ton double clic, est-ce que tu mets bien par défaut le focus sur le selecteur2 dès son affichage ? Dans le cas contraire, il est normal que le blur ne fonctionne pas ?

Autre solution, ton selecteur2 n'est pas encore dans le DOM, et par conséquent blur() ne peut fonctionner une fois que tu ajoutes le champs dans le DOM. Tu peux te renseigner du côté de live() à la place de bind() (ou on() selon la version de jQuery que tu utilises).
lol, on doit faire de la transmission de pensée....

je viens de penser à la fonction live() et apparemment c'est de ce coté là qu'il faut que je cherche....

je creuse le truc,

merci à toi