-1

私が取り組んでいるプロジェクトでは、ページにいくつかのリッチテキスト編集ボックスがあり、数はさまざまですが、非常に大きくなる可能性があります (50 以上の質問/回答セット、それぞれに 8 つのテキスト ボックスがあります)。

もともとこれらは HTML を受け入れるプレーンテキスト ボックスでしたが、これを使用するエンド クライアントが HTML に堪能ではないという事実のために、リッチテキスト エディターの使用に切り替えたため、オリジナルは JavaScript リッチテキスト プラグイン (NicEdit) で変換されます。 )。

これらのエントリ ボックスの数が可変であるため、jQuery セレクターを使用しています。

 $("textarea").each(function(index) {
      var id = this.id;
      myNicEditor.addInstance(this);
      $("#nic"+id).attr('contenteditable','false');
 });

ただし、エディターの総数が約 200 を超えると、スクリプトのタイムアウト警告が表示されるようになります。400 では、終了するために「続行」を 2 回クリックする必要があります。

タイムアウトを防ぐためにこの関数を再構築するにはどうすればよいですか?

4

2 に答える 2

0

Web ページ上の 400 人のリッチ テキスト エディターは、大量のリソースを使用する必要があります。最善の策は、これらすべてを 1 ページにまとめようとしないことだと思います。アプリを再編成してみてください。小さなページに分割するか、必要に応じてページのサブセクションをオンデマンドでロードしてください。

または、テキストエリアをそのままにして、必要に応じてオンデマンドで一度に 1 つのリッチ エディターだけをロードすることもできます。

于 2013-07-19T16:41:26.217 に答える
0

jQuery はセレクターで多くのことを行っていますが、見つかった要素は jQuery オブジェクトにラップされていません。200 はそれほど大きくはありませんが、できることは 2 つあります。

  1. バニラ JavaScript 呼び出しを介してすべてのテキストエリアを見つける
  2. setTimeout を介してイベント キュー内のテキストエリアを処理する
var els = document.getElementsByTagName("textarea")
var i = 0
var func = function() {
    var el = els[i]
    myNicEditor.addInstance(el);
    $("#nic"+el.id).attr('contenteditable','false');
    i++
    setTimeout(func,0)
}
func()
于 2013-07-19T18:44:25.947 に答える