0

サーバー側に入力されたテキストボックスの膨大なリストを持つWebページを書いています。ページの読み込み時に、テキスト ボックスからすべての値を取得して配列に格納する必要があります。現在、私はこれを次のようにやっています:

テキストボックスのリスト:

<input name="hdnID" type="hidden">256<input>
<input name="hdnCode" type="hidden">XXXXX<input>
<input name="hdnName" type="hidden">Name 1<input>
<input name="hdnID" type="hidden">257<input>
<input name="hdnCode" type="hidden">XXXXY<input>
<input name="hdnName" type="hidden">Name 2<input>
...

JavaScript/Jquery:

  var count = $('[name=hdnCode]').length;
  var arrItems = new Array();

  for (i=0; i < count; i++)
  {
      var joItem = {
              "itemID"       : $('[name=hdnID]')[i].value,
              "itemCode"     : $('[name=hdnCode]')[i].value,
              "itemName"     : $('[name=hdnName]')[i].value
          };

    arrItems[i] = joItem;
  }

現在、私のページには 1045 個のアイテムがあり、3135 個のテキスト ボックスがあります。IE8 で、「このスクリプトの実行を停止しますか?ページ上のスクリプトにより、Internet Explorer の実行が遅くなります..」というポップアップが表示されます。IE 8が問題なく処理できるように、これを高速化または効率化する方法を考えられる人はいますか?

4

4 に答える 4

0

マークの答えは効率的です。しかし、配列が非常に大きい場合、それも失敗する場合があります。しかし、私にはそのための解決策があります。別のページを持つことを考えて、localstorage、ajax などのより多くの Web テクノロジを使用するようにしてください。

このコードを試してください

var hdnIDs =  $('[name=hdnID]');
var hdnCodes = $('[name=hdnCode]');
var hdnNames = $('[name=hdnName]');
var hdnIDsDup = hdnIDs.concat();
var hdnCodesDup = hdnCodes.concat();
var hdnNamesDup = hdnNames.concat();


function process(hdnIDs,hdnCodes,hdnNames){
        var joItem = {
              "itemID"       : hdnIDs.value,
              "itemCode"     : hdnCodes.value,
              "itemName"     : hdnNames.value
      };
      arrItems[i] = joItem;
   }


 setTimeout(function(){

    var start = +new Date();

    do {
         process.call(context, hdnIDsDup.shift(),hdnCodesDup.shift(),hdnNamesDup.shift());
    } while (hdnCodesDup.length > 0 && (+new Date() - start < 50));

    if (hdnCodesDup.length > 0){
        setTimeout(arguments.callee, 25);
    } else {
        callback(array);
    }
}, 25);  

タイムアウト関数内に存在する do while ループはミリ秒実行され、2 番目のタイムアウトは、処理中の配列内に要素が存在しなくなった場合に再度ループすることを確認します。

この方法の詳細については、次のリンクを参照してください。 http://www.nczonline.net/blog/2009/01/05/what-determines-that-a-script-is-long-running/ http://www.nczonline.net/blog/2009/08/ 11/timed-array-processing-in-javascript/

于 2013-04-04T08:20:20.660 に答える
0

データ属性を使用

<input name="hdnID" type="hidden" data-inpname="itemID">256<input>
<input name="hdnCode" type="hidden" data-inpname="itemCode">XXXXX<input>

これを試して

var arrItems ={};
$('input').each(function(i,v){
    var $this=$(this), 
        name=$this.data('inpname');
        value=$this.val(); 

    arrItems.name=value;
});
于 2013-04-04T07:59:02.587 に答える