2009-08-18 17 views
5

Mam jQuery UI draggable i kilka oddzielnie zdefiniowanych droppables. Ponieważ jeden z droppables jest skonfigurowany jako tolerance: 'intersect', możliwe jest upuszczenie przeciągania na więcej niż jeden rodzaj droppable w tym samym czasie.Jak zapobiec uruchamianiu droppables wielu jQuery UI?

Jaki jest najlepszy sposób, aby zapobiec strzelaniu niezamierzonych droppables? Zasadniczo, chciałbym nadać priorytet droppables, aby droppables z tolerance: 'intersect' nie został wyzwolony, jeśli został wywołany inny droppable.

Aktualizacja - Więcej informacji o wyjaśnienie rzeczy:

  • Wszystkie droppables są skonfigurowane tolerance: 'pointer' wyjątkiem jednej klasy droppable z tolerance: 'intersect'.

  • Powodem, dla którego jedna klasa droppable ma tolerance: 'intersect' jest to, że droppables są naprawdę wąskie, a użytkownicy mają problemy ze znalezieniem ich z tolerance: 'pointer'.

  • Przeniesienie droppables dalej nie jest opcją.

  • Żaden z droppables pokrywają się, ale przeciągany jest wystarczająco duża, aby pokrywać droppable z tolerance: 'intersect' podczas gdy wskaźnik myszy znajduje się nad innym droppable z tolerance: 'pointer'. W ten sposób można jednocześnie uruchomić co najwyżej dwa droppables.

  • Interfejs użytkownika jest skonfigurowany w taki sposób, aby intencje użytkownika można było ustalić, ignorując możliwość zrzucenia, jeśli została wywołana kolejna próba odrzucenia; tj. jeśli użytkownik przestawił wskaźnik myszy nad zrzucaną z tolerance: 'pointer', można bezpiecznie założyć, że zamierzał go tam upuścić. Problem polega na tym, że nie mogę wymyślić, jak zignorować niechciane zrzuty.

+0

czy możesz po prostu powiedzieć mi najlepsze rozwiązanie dla tego rodzaju problemów, ponieważ mam ten sam problem, jeśli pamiętasz :) –

Odpowiedz

0

Przenieś je fizycznie od siebie tak, aby nie można było ich jednocześnie spaść. W przeciwnym razie, w jaki sposób należy określić, co użytkownik zamierzał? Czy zamierzasz obliczyć wartości procentowe przeciągania na każdym przecinanym droppacku?

+0

Witaj Jason, dziękuję za odpowiedź. Zobacz pierwszą aktualizację w oryginalnym pytaniu o odpowiedzi na Twoje pytania. – bryan

+0

Czy możesz zrobić zrzut ekranu z tego, co próbujesz osiągnąć? – Jason

1

Być może w przypadku zdarzenia "mniej korzystnego" można było sprawdzić, czy przeciągane jest również nad "preferowanym" zrzutem i czy wyłącza "mniej preferowany" zrzut.

Przepraszam za terminologię, po prostu próbuję przeprowadzić burzę mózgów.

7

W over: przypisać klasę do zamierzonego droppable i usunąć klasę od wszystkich innych droppables:

$(".dragArea").not($(this)).removeClass("dragHover"); 
$(this).addClass("dragHover"); 

Następnie w drop: sprawdzić, czy klasa jest ustawiona:

if(!$(this).is('.dragHover')){ 
    return false; 
} 

ten sposób , wywoływana jest tylko jedna zrzutowa.

+0

Mogę potwierdzić, że to działa (jquery-ui 1.9.1 i jqery 1.8.2) Dzięki – Neograph734

Powiązane problemy