2009-07-27 6 views
4

Le code ci-dessous ne désactive pas complètement les triables sur l'événement de démarrage. Il ajoutera les classes ui-sortable-disabled et ui-state-disabled aux éléments triables, mais il ne désactivera pas la fonctionnalité - en d'autres termes, les triables sont désactivés, mais ils acceptent toujours l'élément déplacé et se comportent comme s'ils étaient activés.jQuery triable ('disable') à partir de l'événement de démarrage ne fonctionnant pas comme prévu

var assignedSortables; 
var startDrag = function(event, ui) { 
    assignedSortables.each(function() {$(this).sortable('disable');}); 
}; 

var stopDrag = function(event, ui) { 
    assignedSortables.each(function() {$(this).sortable('enable');}); 
}; 

assignedSortables = $(".my-sortable-containers").sortable({ 
    connectWith: '.my-sortable-containers', 
    start: startDrag, 
    stop: stopDrag 
}); 

La raison pour laquelle je veux faire est le début de la traînée est parce que je pourrais avoir besoin de désactiver d'autres Sortables connectés qui contiennent déjà l'élément traîné (je retirai la logique afin de simplifier). Est-ce un bug ou y a-t-il un moyen de contourner le problème?

Répondre

4

Je n'ai pas vérifié pour voir si la bibliothèque jQuery est « fixe » depuis que je posais la question, ce que je faisais au lieu était utiliser le mousedown et mouseup événements pour désactiver et activer

$(".myDraggableContainer").mousedown(functionToDisableTheCorrectSortables).mouseup(functionToEnableSortables); 

En procédant façon en fait désactiver les triables de réception entièrement

+0

Salut! Je ne faisais que jouer avec cacher le .placeholder dans l'événement over, mais c'est juste un bidouillage visuel, je dois encore enlever l'article etc. J'ai essayé votre réponse mais ne peux pas l'obtenir pour fonctionner? Voir mon violon: http://jsfiddle.net/tunafish/m32XW/1/ Qu'est-ce qui me manque? Dans cet exemple, je veux juste désactiver la bonne liste lorsque vous faites glisser des éléments de la gauche. – FFish

+0

Je l'ai maintenant! Je faisais les événements de souris sur la liste pas les articles. Voir: http://jsfiddle.net/tunafish/m32XW/3/ Quel soulagement, maintenant je peux obtenir de mes hacks fous :-) * Bounty * acclamations – FFish

+0

Impressionnant, bon travail – JeremyWeir

7

Je viens de rencontrer le même problème. J'ai été en mesure d'obtenir le sortable connecté que je voulais désactiver pour désactiver (pour les réels) en appelant la méthode 'refresh' sur le sortable initiateur.

Ainsi, l'intérieur de votre rappel de départ serait quelque chose comme:

$connectedList.sortable('disable'); 
$(ui.sender).sortable('refresh'); 

Je suppose que l'intérieur de la liste prend l'ensemble des listes connectées et non handicapées avant l'événement de démarrage est déclenché et ne vérifie pas si cette liste change après le démarrage est déclenché.

+0

Cela a fonctionné pour moi et dans mon cas j'utilisais 2 sortables dans une application Angular JS donc je pouvais désactiver un quand il ne devrait pas être autorisé à accepter un élément, appel rafraîchir le source triable et le rafraîchissement était l'astuce, sans que le désactivateur ne fonctionne pas seul. Exécution de jQuery 1.8.2 – likestoski

+0

La clé appelle "refresh" sur le * source * triable ... contre-intuitif! –

+0

Le code ci-dessus doit être utilisé dans l'événement *** activate *** de la liste connectée. FYI lorsque vous désactivez la liste triée vous ne recevrez pas l'appel d'événement *** deactivate *** – Amerrnath

Questions connexes