2010-01-10 6 views
0

Je travaille avec un code javascript existant qui prend un LI et le rend droppable à un champ de saisie. Je voulais ajouter une contrainte supplémentaire à cela, et l'appliquer en créant mon propre gestionnaire d'événements, et en appelant event.stopImmediatePropagation() si la contrainte n'est pas satisfaite. Ce javascript existant est ressembler à ceci:jquery's event.stopImmediatePropagation() ne semble pas fonctionner

$input.droppable({ 
    accept: accept, 
    activeClass: 'droppable_active', 
    hoverClass: 'droppable_hover', 
    //   tolerance: 'touch', 
    drop: function(e, ui) 
    { 
     // do some stuff; 
    } 

Et est initié dans mon code via l'appel suivant:

$('form').dmFrontForm(); 

Ce qui est une coutume jQuery UI qui définit ce gestionnaire d'événements.

Avant de faire cet appel, je configurer mon propre gestionnaire:

$('input').('drop', function(e, ui) { 
    if (constraintIsNotMet) { 
     e.stopImmediatePropagation(); 
    } 
}); 

J'ai vérifié l'ordre que les gestionnaires d'événements ont été appelés en ajoutant dans les déclarations d'alerte (en fait, peu importe quel ordre je mets ces lignes de code, mon gestionnaire a toujours répondu en premier, ce qui est un peu louche pour moi), mais peu importe combien j'essaie, je n'arrive pas à faire arrêter le premier manieur.

Répondre

1

Je sais que ce n'est pas une réponse directe à votre question de pourquoi il n'arrête pas la propagation, mais pourquoi ne pas utiliser la méthode intégrée accepter?

http://docs.jquery.com/UI/Droppable#option-accept

exemple d'utilisation

$('.selector').droppable('option', 'accept', function(){...}); 

la fonction doit retourner false pour annuler la baisse ..

+0

# 1 Je n'ai pas le contrôle sur le code javascript d'origine (depuis sa non mine) # 2 accepter ressemble à ce qu'il faut un sélecteur comme une contrainte. Ma contrainte est complexe et basée sur une logique – blockhead

+0

accepte accepte un sélecteur ou une fonction comme une contrainte .. et vous pouvez l'ajouter après l'initialisation de la droppable. regarde ma réponse révisée. –

+0

Cela fonctionne, mais je ne peux pas donner de retour à mon utilisateur, car la fonction semble être appelée à chaque fois que la chose est déplacée. Pas ma situation idéale, mais ça marche pour le moment. – blockhead

Questions connexes