2012-09-11 87 views
0

我無法發現爲什麼瀏覽器掛起並被第一個for循環在這個函數中捕獲,arguments.length也不會打印console.log。爲什麼瀏覽器卡在這個JavaScript循環中?

這是通過在ColorPicker自己的ID則變量其他屬性點擊功能改變:

$('#colorSelector3').click(function(){ 
colorPickDynamic('#colorSelector3','h1','color'); 
}); 

這裏就是瀏覽器的第一個掛起循環功能:

function colorPickDynamic(cp){ 
    var i, 
     j, 
     x, 
     tag = [], 
     colorProperty = []; 

    for (x=0, i = 1, j = 2; x <= arguments.length; i+=2, j+=2, x++) { 

     tag[x]=arguments[i]; 
     colorProperty[x]=arguments[j]; 

     console.log(arguments.length); 
     console.log(colorProperty[x]); 
    } 

    $(cp).ColorPicker({ 
     color: '#0000ff', 
     onShow: function (colpkr) { 
      $(colpkr).fadeIn(500); 
      return false; 
     }, 
     onHide: function (colpkr) { 
      $(colpkr).fadeOut(500); 
      return false; 
     }, 
     onChange: function (hsb, hex, rgb) { 
      for (j = 2; j < arguments.length; j+=1) { 
       $(tag[0]).css(colorProperty[0], '#' + hex); 
      } 
      $(cp + ' div').css('backgroundColor', '#' + hex); 
     } 
    }); 
} 

任何幫助將是驚人的!謝謝

+0

在jsfiddle.net上顯示演示plz – IProblemFactory

+1

在「循環」消失之前,您可以從中刪除多少代碼? – Deestan

+1

您可能希望在腳本調試器中的第一個循環「body」中放置一個斷點,以便您可以看到「正在發生的內部」是什麼...... – benqus

回答

3

你確定它掛起(例如無限循環)嗎?而不僅僅是簡單的崩潰?

因爲您正在訪問arguments[i],其中參數從1開始,每次迭代時遞增2。如果參數包含零個或一個元素,它將在第一次迭代時崩潰,嘗試在任何記錄完成之前訪問arguments[1]

您是否打算使用arguments[x]

+0

yes即使更改console.log(colorProperty [x]);高達20多萬,然後鉻崩潰? – Joe

+0

@Joe:你的'colorPickDynamic'怎麼被調用?什麼*是'arguments.length'的值? –

+0

對deestans檢查後感到抱歉,我看到它使用舊的緩存.js文件,我希望循環解決! – Joe

相關問題