2015-06-30 114 views
0

我想從表單字段數組中獲取總值,但由於某種原因,Keyup上的值不正確最後一個值從最後一個輸入值中增加而並非所有字段都是我的功能:Jquery函數循環增加值

function percentage_hardcoded_form(_formharcoded_id, _form_fieldArray, _form_hardcodedtotalWrapper, _form_hardcodedtotalId) { 

      var _form   = $j(_formharcoded_id); 
      var _sumDisplay  = _form.find(_form_hardcodedtotalId); 

      $j(_form_hardcodedtotalId).attr('disabled','disabled'); 


      $j.each(_form_fieldArray, function(index, item) { 

       var _summands  = item; 
       var sum    = 0; 

       _form.delegate(_summands, 'change', function() { 

        //$j.each(function() {  
         var value = Number($j(this).val()); 
         if (!isNaN(value) && !$j(this).is(_form_hardcodedtotalId)) sum += value; 
        //}); 

        if(sum === 100) 
        { 
         // is 100 
         $j(_form_hardcodedtotalWrapper).removeClass('warning'); 
         $j(_form_hardcodedtotalWrapper).find('.QuestionWarning').hide(); 
        } 
        else 
        { 
         // isnt 100 
         $j(_form_hardcodedtotalWrapper).addClass('warning'); 
         $j(_form_hardcodedtotalWrapper).find('.QuestionWarning').show(); 
        } 

        _sumDisplay.val(sum); 

       }); 
      }); 
     } 

     percentage_hardcoded_form('#aspnetForm #questions_page_Page17', designForm_ids_1, "#question_DCWorkSplit", "#DCWorkSplit"); 

以下是我與工作的的jsfiddle: http://jsfiddle.net/q05k48b7/1/

更新

我已經更新了JS提琴見鏈接下面,仍然無法正常工作。

http://jsfiddle.net/q05k48b7/2/

+0

你'sum'總是復位爲0每'onblur'事件。 –

+0

好吧我試着把var的總和放在每個之外,但是它總是增加到總數上,但是當值減少時它不會刪除?有任何想法嗎? – neoszion

+0

如果我願意這樣做,我將爲該組文本框分配一個公共類,並獲取每個文本框的值(通過類),然後將它們相加並分配給另一個文本框,每次發生onchange事件時 –

回答

1

如何通過引入一個窗體類型的對象,你們每個人有不同的形式,簡化了代碼?

var formObj = function($){ 
    var fields = []; 
    var total = 0; 
    var totalField = null; 

    return { 
     setFields: function(fieldIds){ 
      fields = fieldIds; 
     }, 
     setTotalField: function(fieldId){ 
      totalField = fieldId 
     }, 
     setTotal: function(){ 
      var total = 0; 
      $.each(fields, function(idx,item){ 
       var v = $('#'+item).val(); 
       if(!isNaN(v)){ 
        var nV = Number(v); 
        total += nV; 
       } 
      }); 
      $('#'+totalField).val(total); 
     }; 
    }; 
}; 

然後,您可以使用這樣的:

var form1 = new formObj($j); 
form1.setFields([ 
    'TurnoverFromOwnDesign', 
    'Feesinrespectofdesignonly', 
    'TurnoverFromSubcontractedWork', 
    'TurnoverFromSupervisedWork', 
    'TurnoverDesignsByClient', 
    'DCAllotherturnover' 
]); 
form1.setTotalField('DCWorkSplit'); 
form1.setTotal(); 

的問題是不是太清楚 - 一個MVCE會有所幫助,但我認爲this fiddle表明上面的圖案做你想要什麼。

注意,小提琴要求輸入change處理各formObjsetTotal方法:

$j('#questions_page_Page17 input').change(function(){ 
    form1.setTotal(); 
    form2.setTotal(); 
}); 
+0

這看起來好多了,我會測試什麼時候回到我的辦公桌,非常感謝你,這讓我瘋狂。 – neoszion

+0

@neo沒問題,希望能解決問題!如果你遇到困難,讓我知道。 –

+1

所有的作品很好,我實際上通過在原始函數之外添加一個單獨的函數並在每個函數內部調用它來解決我的原始問題。但我已經使用過你的版本,因爲它效果更好。再次感謝。 – neoszion