2013-04-18 5 views
1

Сценарий, приведенный ниже, выдает ошибку (пользовательские поля не определены). Нужно ли передавать идентификаторы элементов по-разному?jQuery seed each() с массивом элементов

Я пытаюсь выровнять массив с полями формы, которые я ищу, чтобы вычислить. Он должен перебирать каждое из полей формы в массиве и увеличивать сумму переменной со значением элемента формы.

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.value, this на самом деле является строкой, а не элементом. Попробуйте

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(); 
    }); 
}); 
Смежные вопросы