2013-04-18 80 views
1

下面的腳本拋出錯誤(customfields未定義)。我是否需要以不同的方式傳遞元素ID?jQuery種子each()與元素陣列

我想種子與我期待計算的表單域的數組。它應該遍歷數組中的每個表單字段,並使用表單元素的值增加sum變量。

jQuery(document).ready(function(){ 

    jQuery("#customfield_21070").attr('style','width:60px'); 
    jQuery("#customfield_21070").attr('disabled','disabled'); 

    var customfields = [ 
    '#customfield_11070', 
    '#customfield_11071', 
    '#customfield_20071', 
    '#customfield_20072', 
    '#customfield_20073', 
    '#customfield_20074' 
    ]; 

    jQuery(customfields).each(function() { 
     jQuery(this).attr('style','width:60px'); 

      jQuery(this).keyup(function(){ 
       calculateSum(); 
      }); 


     }); 

    }); 

    function calculateSum() { 

     var sum = 0; 

     //iterate through each textboxes and add the values 
     jQuery(customfields).each(function() { 

      //add only if the value is number 
      if(!isNaN(this.value) && this.value.length!=0 && this.id !== "customfield_21070") { 
       sum += parseFloat(this.value); 
      } 

     }); 
     //.toFixed() method will roundoff the final sum to 2 decimal places 
     jQuery("#customfield_21070").val(sum.toFixed(2)); 
    } 

回答

0

jQuery的.each()方法是爲了遍歷一個jQuery對象。您應該使用簡單的for循環來迭代您的數組 - 這比使用jQuery .each()方法快很多。

for(var i=0, len=customfields.length; i<len; i++) { 
    console.log(customfields[i]); 
} 

證明有關性能聲明:http://jsperf.com/jquery-each-vs-for-loop

+0

我認爲你的回答是有道理的。 Console.log正在工作。現在我只需要讓計算函數工作> http://stackoverflow.com/questions/16091742/jquery-passing-array-values-into-a-function – jcoder

0

將數組傳遞給jQuery不會使用數組中的條目作爲選擇器。您必須將選擇器作爲字符串傳遞。當您致電this.valuethis實際上是一個字符串,而不是一個元素。嘗試

jQuery(customfields.join(',')) 
+0

但是,它將把它作爲一個字符串數組,他是那裏面的每一個正確的選擇他們。 –

+0

@KevinB在第一個。我認爲這是巧合,但不是在第二個。 – Musa

0

試試這個使用jQuery.each()

$.each(customfields, function (index, value) { 
    $(value).attr('style', 'width:60px'); // OR $(value).width(60); 
    $(value).keyup(function() { 
     calculateSum(); 
    }); 
});