2009-11-11 5 views
2

Ma page contient des éléments div glissables (et non jQuery UI dragable).jQuery - événements d'écrasement?

Maintenant, nous voulons ajouter une nouvelle fonctionnalité: l'utilisateur devrait être en mesure de sélectionner plus d'un div à la fois et faites glisser ces éléments div sans déclencher les événements liés précédents.

Voici mon problème:

Est-il possible de désactiver tant l'événement mousedown, mousemove et mouseup de chaque div car ils font partie d'une sélection?

Donc, fondamentalement, je veux remplacer l'ancien événement par une nouvelle et restauration après les événements originaux.

Merci pour votre temps


Mise à jour:

J'ai écrit un petit script pour tester stopImmediatePropagation

jsBin demo

Avec le code suivant:

$("p").click(function(event){ 
    alert (' I am the old event '); 
}); 

$("a").click(function() 
{ 

    $("p").click(function(event){ 
    event.stopImmediatePropagation(); 
    alert (' I am the new event '); 
    }); 


return false; 
}); 

Cela ne fonctionne pas car event.stopImmediatePropagation(); est appelée après le premier événement. Ainsi, la eteint est:

Je suis l'ancien événement

Je suis le nouvel événement

Répondre

4

Vous pouvez jeter un oeil à event.stopImmediatePropagation().

Voir ici dans le jQuery docs

Fondamentalement, vous faites une fonction en option bloquer les autres fonctions de l'exécution - vous n'avez pas besoin d'enlever et rebind les fonctions.


Voici votre code de JSBin que j'ai modifié pour le faire fonctionner. C'est un peu hacky et probablement pas très efficace, mais ça marche!

$("p").click(function(event){ 
    alert (' I am the old event '); 
}); 

$("a").click(function() { 
    $("p").each(function() { 
    var $t = $(this); 
    var events = $t.data("events"); 
    $t.unbind('click'); 
    $t.click(function(event){ 
     event.stopImmediatePropagation(); 
     alert (' I am the new event '); 
    }); 
    for (var i = 0, l = events.length; i < l; ++i) { 
     $t.click(events[i]); 
    } 
    }); 
    return false; 
}); 
+0

Salut merci pour votre réponse. C'est exactement ce que je cherchais. Cependant, cela ne fonctionne pas. Voir ma mise à jour post pour plus de détails. – jantimon

0

Ne pouvez-vous pas simplement unbind() l'événement?

Voir le jQuery docs

+0

Ne fonctionne pas. Démonstration: http://jsbin.com/eqefa Source: http://jsbin.com/eqefa/edit – jantimon

+0

Réponse mise à jour. –