2009-02-24 4 views
6

IEでよく機能するUIコードを取得できません。IEのテーブルでjQuery UIのパフォーマンスに関する問題が発生しました

私はテーブルを持っています - 値の行列。各セルは空でも、アイテムのリストを保持することもできます。

ユーザーがセル間で項目をドラッグできるようにしたい。

だから私のHTMLは次のようなものになります。これは、単純化された切り捨てと未完成であること

$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 
     }); 
    }); 
}); 

注:その後、私はjQueryの1.3.1とjQuery UI 1.6rc6を使用してい

<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> 

をコード。

私の問題は、FX、Safari、Chromeなど(すべてのまともなブラウザ)ではうまくいきます。

IEは本当に苦労します。 5x5の表でドラッグの開始時にIEの遅延が目立つ。おそらく100個のアイテムを含む10x10のテーブルで、ドラッグの開始がブラウザをハングアップします。

20x15までのセルをサポートしたいと思うかもしれません。おそらく最大500アイテムです。これは単なる不可能なのでしょうか?それはそうすべきではないようです。

何か間違っていますか?このようなIEのページを遅くしないこれを行う方法はありますか?

+1

私もこの正確な問題を抱えています。大きなテーブル、テーブル内のネストされたdiv。 firefoxは10秒以内にページをレンダリングします。つまり、2分待ってからテーブルをレンダリングします。 firefoxはまだドラッグとdtopと一緒にジップ、すなわちクロール..本質的にそれはフリーズし、ドラッグ&ドロップは動作しません。 以下のいくつかのソリューションを試してみます。固定幅、および#idのtagname.class参照。しかし、私はまだそれが遅くなる恐れがあります。他の誰かがいいアイデアを持っているなら、私はすべての耳になるでしょう。 – Bingy

+0

ええええええええええええええええええええええええええええええええええええええええええええええることは、IEのユーザーを制限することでした.FXとChromeユーザーができる行と列の小さなサブセットしか選択できません。それでもIE8はちょうど25セル(5x5グリッド)のセルにしか対処できません.7と6は絶望的です。それは90年代後半のウェブ開発の思い出をもたらし、醜いことですが、ブラウザが非常に貧弱であれば、他に何ができますか? – Keith

+0

同じ問題があると、IEは大規模なグリッドでは非常に遅いですが、ChromeとFirefoxは問題ありません。 –

答えて

2

この厳密な問題は、iGoogleや他のsimliarアプリケーションが、エッジの周りに点線で囲まれた透明なボックスを使用する理由です。上記で概説した問題のため、IEは完全なオブジェクトをドラッグできません。

+0

http://www.google.com/igを意味しますか? IEのページでも、実際のコンテンツをドラッグします。私は小さなdivをドラッグするだけです。 – Keith

2

テーブルをレンダリングすることができます...テーブルなしで試してみることはできますか?

あなたの細胞は、あなたがそれらを浮動テーブルのような表示を実現することができます同じサイズである場合は、次の表を使用しても「固定」するtable-layoutスタイルを設定し、セルのサイズを指定する必要不可欠である場合

<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> 

助けて。

+0

ありがとう、良いアイデア - これは実際に表形式のデータです。行ヘッダーと列ヘッダーはスパンで階層化されています。私はまた、私はセルのサイズを修正することができるとは思わない。 – Keith

3

jQueryが検索しなければならないDOMの部分を絞り込むと、役立つ場合があります。

<table id="myTable"> 

はその後、このコンテナ内の要素を見つけるためにあなたのjQueryのセレクタを変える含むDOM要素にIDを追加します

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

ありがとう - 私はそれを試してみます。 – Keith

+0

私はこれが$( '#myTable、.draggable-item')だと思っていました。 – Jay

+1

@Jay。いいえ、私は 'Ancestor Descendent'セレクタ(http://docs.jquery.com/Selectors/descendant#ancestordescendant)を参照していました。コンマは 'n'セレクタ(http://docs.jquery.com/Selectors/multiple#selector1selector2selectorN)になりますが、これは有用ではない場合があります。 –

1

周りにドロップ可能な定義から「activeClass」を落としている、とだけ使用して私の仕事'hoverClass'

約10行の約150行の表にあります。 10秒の遅れから1秒未満になりました。引きずりは少しぎこちなくなりましたが、使用できませんでした。

関連する問題