2012-03-23 2 views
1

あまりにも時間がかかるスクリプトを実行しているスクリプトによって設計された本質的に複雑なページがあり、スクリプトの停止ダイアログボックスが生成されます。ie8 javascriptの停止スクリプトは、実行を中断してエラーを回避するためにsettimeoutを使用できます

IE6/7/8以外のすべてのテスト済みブラウザでページが正常に動作します。

このエラーを回避するために、settimeoutsを使用してスクリプトを分割できるかどうかを知りたいと思います。

次のようなものです:$( '。level')。each(f(){settimeout(f(){script}、1)});

更新:はいもちろん、誰もがコードを見たいと思っていましたが、それも大きすぎます。検索結果のより控えめなセットのいずれかに#thetableで5700個のDOMノードの周りにある

$('#thetable').find('tr.listing :checkbox').click(function(event) { ... }); 

:おそらく、この行は、オンロードのトップレベルで何が起こっているかのアイデアを示します。

+3

はい、できます。しかし、いくつかのコードや、それが何をしているかの概要を見ることなく、これはスクリプトのパフォーマンスを改善する最良の方法です。 –

+0

おそらく、あなたはスクリプトをリファクタリングする方が良いかもしれません... – Christoph

+0

@Christoph、はい、私の考えは、settimeout、他のリファクタリングのアイデアを使って、onclickイベントのバインディングを非常に多くのタグに分割することでしたか? – Don

答えて

1

このセレクタの検索は$( '#thetable')です。( 'tr.listing:checkbox')はIEで何をしているのですか?

あなたができるカップルの事がありますが...

それはあなたがテーブルに設定された結果を示すように聞こえます。この場合、ページ変更イベントに関するさらなる結果を得るために、ページングを実装してスクリプトをサーバーに戻すことができます。これは、処理するDOMノードが少なくなることを意味し、停止スクリプトの問題を処理する必要があります。

もう1つのアプローチは、チェックボックスに予測可能なIDを与え、次に$( "#thetable_checkbox_" + checkboxid)などの直接選択を行い、forループを結果に繰り返し実行して、選択しているcheckboxidを変更します。ここで

は、たとえば、あなたのチェックボックスのIDのは、あなたがたsetTimeoutでスクリプトを壊すために述べたアプローチも動作しますthetable_checkbox_1などのようなIDが

で上に生成されている

for (int x = 0; x < numResults; x++) { 
    setTimeout(function() { 
     $("#thetable_checkbox_" + x).bind(function() { 
      clickEventFunction() 
     }); 
    }, 0); 
} 

など、いくつかの擬似コードでありますしかし、あなたは長い時間がかかるjQueryセレクターを避ける必要があります。タイムアウト値を0に設定することもできます。これは、ブラウザの準備が整うとすぐに実行するためです。タイムアウトを0に設定すると、スクリプトに戻る前に保留中の操作を実行できます。スクリプトが長時間実行されている場合は、モーダル読み込みダイアログを表示して、準備ができたときにページが表示されるようにする必要があります。

+0

ああ、それを正しく行うための自由。マーケティングはすでに設定されています(実際には、サイトはサブスクリプションの後ろに生きている、または私はあなたと共有しています)。結果の鳥の性格とページングの考え方は外でした。 – Don

関連する問題