2015-09-21 74 views
0

我試圖做一個函數,爲html類使用生成重複的css屬性。該功能分三步工作。Javascript代碼凍結瀏覽器

1 - 從控制檯創建該對象具有:

var obj = new module('prefix', 'suffix'); 

2-我添加幾個特性:

obj.addProperty('width', 'px', 2); 
obj.addProperty('height', 'px', 2); 

3 - I運行克隆過程與:

obj.clone('15', '3'); 

但是,它沒有明顯的原因凍結。 下面是完整的代碼:

<script> 
window.cloner_module = function(prefix, suffix) { 
    this.properties = [] 
    this.prefix = prefix; 
    this.suffix = suffix; 

    this.addProperty = function(option, type, side) { 
     var array = []; 
     array.push(option, type, side); 
     this.properties.push(array); 
    } 

    this.clone = function(max, step) { 

     var array = []; 
     var entry_count = 0; 
     var innerModuleArray = []; 
     var moduleArray = []; 
     var property; 
     var option; 
     var type; 
     var side; 
     var value; 
     var string = ""; 


     for (var i = 0; i < max; i + step) { 
      innerModuleArray = []; 
      moduleArray = []; 
      moduleArray.push('.' + prefix + i + suffix + '{'); 

      for (var y = 0; y < this.properties.length; y++) { 
       property = this.properties[y]; 
       option = property[0]; 
       type = property[1]; 
       side = property[2]; 
       value; 

       if (!side) { 
        value = i; 
       } else if (side == '1') { 
        value = type + i; 
       } else if (side == '2') { 
        value = i + type; 
       } else { 
        console.log('"Side" property must be between 0 and 2'); 
       } 

       string = option + ": " + value + "; "; 
       innerModuleArray.push(string); 
      } 

      moduleArray.push(innerModuleArray); 
      moduleArray.push('}'); 
      array.push(moduleArray); 
      entry_count++; 
     } 

     this.clones = array; 
     this.last_entry_count = entry_count; 
     this.last_step_registered = step; 
     this.last_max_registered = max; 
    } 
} 
</script> 
+0

我注意到的第一件事是'obj.clone('15','3')'中的參數被用作數字。所以你會想要像這樣使用它們:'obj.clone(15,3)'。否則,它可能只是爲循環中的每個迭代進行連接。另外''我'不是每個循環更新。 –

+1

也許你錯誤地把'i + = step'當作'i + step'。 –

+0

你有無限循環。 :)使用'for(var i = 0; i AdityaParab

回答

2

您的代碼進入一個無限循環作爲for循環,這又導致瀏覽器凍結的結果。核心問題是:

for (var i = 0; i < max; i + step) 

這裏最後的語句總是等於3(0 + 3),所以循環永遠不會結束。你可能想將其更改爲:

for (var i = 0; i < max; i += step) 

此編輯將通過不斷增加stepi每次迭代,因爲是你的初衷。

+0

然後它可能只是一個印刷錯誤,投票結束它。 –