2009-02-24 12 views
6

Mam problemy z uzyskaniem kodu UI w ogóle w IE.Problemy z wydajnością interfejsu jQuery UI z tabelą w IE

Mam tabelę - macierz wartości. Każda komórka może być pusta lub zawierać listę przedmiotów.

Chcę, aby użytkownicy mogli przeciągać elementy między komórkami.

Więc moim HTML wygląda mniej więcej tak:

<table> 
    <tr><td></td><th scope="col">col 1</th><th scope="col">col 2</th></tr> 
    <tr><th scope="row">row 1</th> 
     <td class="droppable-cell"> 
      <div class="draggable-item">item A</div> 
      <div class="draggable-item">item B</div> 
     </td> 
     <td class="droppable-cell"></td> 
    </tr> 
    <tr><th scope="row">row 2</th> 
     <td class="droppable-cell"></td> 
     <td class="droppable-cell"> 
      <div class="draggable-item">item C</div> 
      <div class="draggable-item">item D</div> 
     </td> 
    </tr> 
</table> 

Następnie używam jQuery 1.3.1 i jQuery UI 1.6rc6:

$j('.draggable-item').each(function() 
{ 
    $j(this).draggable({ 
     addClasses: false, 
     revert: true, 
     zIndex: 2000, 
     cursor: 'move' 
    }); 
}); 

$j('.droppable-cell').each(function() 
{ 
    $j(this).droppable({ 
     addClasses: false, 
     activeClass: 'droppable-cell-candrop', 
     hoverClass: 'droppable-cell-hover', 
     tolerance: 'pointer', 

     drop: function(event, ui) 
     { 
      //function to save change 
     }); 
    }); 
}); 

pamiętać, że jest uproszczony, obcięty i niedokończone kod.

Mój problem polega na tym, że w FX, Safari, Chrome itp. (Tj. Wszystkie przyzwoite przeglądarki) działa to dobrze.

IE naprawdę walczy. Przy 5x5 tabeli widoczne jest opóźnienie IE na początku przeciągania. Na stole 10x10 z około 100 pozycjami początek przeciągnięcia zawiesza przeglądarkę.

Chcę być w stanie obsłużyć do rundy 20x15 komórek i może do 500 elementów - czy to po prostu niemożliwe? Wygląda na to, że nie powinno tak być.

Czy robię coś nie tak? Czy istnieje sposób, aby to zrobić, że nie spowalnia stronę w IE w ten sposób?

+1

Mam również dokładnie ten problem. duża tabela, zagnieżdżone elementy div w tabeli. firefox renderuje stronę w ciągu 10 sekund, tzn. renderuje tabelę po odczekaniu 2 minut. firefox nadal zipuje razem z opcją drag and dtop, czyli przeszukuje ... infact to zawiesza się, a drag and drop nie działa. Zamierzam wypróbować niektóre z poniższych rozwiązań. o stałej szerokości i odwołaniach do zmiennej #id.Ale obawiam się, że nadal będzie wolno. jeśli ktokolwiek ma jakieś dobre i deas, byłbym wszystkimi uszami. – Bingy

+0

Tak, moim rozwiązaniem było ograniczenie liczby użytkowników IE - mogą wybrać tylko niewielki podzestaw wierszy i kolumn, które mogą wykorzystać użytkownicy FX i Chrome. Nawet wtedy IE8 tylko radzi sobie z 25 komórkami (siatka 5x5), 7 i 6 pozostają beznadziejne. Przywraca wspomnienia z późnych lat 90. i jest brzydką rzeczą do zrobienia, ale co jeszcze można zrobić, jeśli ich przeglądarka jest tak marna? – Keith

+0

Mając ten sam problem, IE jest super wolny z dużą siatką, ale Chrome i Firefox są w porządku. –

Odpowiedz

2

Ten dokładny problem polega na tym, że iGoogle i inne podobne aplikacje używają przezroczystego pola z przerywaną linią wokół krawędzi. IE nie może przeciągać pełnych obiektów z powodu problemu opisanego powyżej.

+0

Masz na myśli http://www.google.com/ig? Nawet w IE ta strona przeciąga rzeczywistą treść. Próbuję tylko przeciągnąć małe divy. – Keith

2

Może to być rendering tabeli ... Czy możesz wypróbować bez stołu?

Jeśli komórki są tej samej wielkości można osiągnąć wyświetlanie tabeli-jak je pływające:

<style> 
.droppable-cell{ 
    float:left; width: 50%; height: 20px; border: 1px solid black; 
} 
</style> 

<div class="droppable-cell"> 
     <div class="draggable-item">item A</div> 
     <div class="draggable-item">item B</div> 
</div> 
<div class="droppable-cell"></div> 
<div class="droppable-cell"></div> 
<div class="droppable-cell"> 
     <div class="draggable-item">item C</div> 
     <div class="draggable-item">item D</div> 
</div> 

Jeśli przy użyciu tabeli jest koniecznością ustawieniu stylu table-layout na „stałe” i określania rozmiaru komórki mogą Wsparcie.

+0

Dzięki, niezły pomysł - ale to są naprawdę tabelaryczne dane. Nagłówki wierszy i kolumn są hierarchiczne z rozpiętościami. Też nie sądzę, żebym mógł naprawić rozmiar komórki. – Keith

3

Zawężanie części DOM, które jQuery ma szukać, może pomóc. Dodaj identyfikator do zawierającym elementu DOM

<table id="myTable"> 

Następnie zmieniać swój selektor jQuery znaleźć elementy wewnątrz tego kontenera

$j('#myTable .draggable-item').each(function() { ... 
+0

Dzięki - spróbuję tego. – Keith

+0

Myślałem, że to $ ("# myTable, .draggable-item") zgodnie z dokumentacją. – Jay

+1

@Jay. Nie, miałem na myśli selektory "Ancestor Descendent" (http://docs.jquery.com/Selectors/descendant#ancestordescendant). Przecinek byłby selektorem "n" (http://docs.jquery.com/Selectors/multiple#selector1selector2selectorN), który jest przydatny w niektórych przypadkach, ale nie ten. –

1

moja praca wokół jest upuszczenie „activeClass” z droppable definicji, a tylko przy użyciu "hoverClass".

Na stole z około 150 rzędów z około 10 kolumnami. Przesunięcie trwało od 10 sekund do mniej niż 1. Przeciąganie staje się nieco niestabilne, ale nie można go użyć.

Powiązane problemy