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.
# 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
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. –
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