2 回答

TA貢獻2041條經(jīng)驗 獲得超4個贊
想想這段代碼的流程。當用戶在頁面上具有“輸入項”類的任何輸入元素上完成按鍵(keyup 事件)時,您的最外層函數(shù)就會執(zhí)行。到現(xiàn)在為止還挺好。
您將總和初始化為 0,然后調(diào)用 $('.inputitem').each(function(i){
此調(diào)用意味著對于頁面上具有“輸入項”類的每個元素,您將在內(nèi)部函數(shù)中運行整個腳本。因此,對于第一個 inputitem(可能是左上角的那個,可能不是),我們在 inputitem_val 中得到值 1.0。
這就是麻煩真正開始的地方。接下來,您為所有單元格調(diào)用 each 函數(shù)。但這是一個嵌套調(diào)用。因此,您正在為外部每個循環(huán)的 9 個(或許多)單元中的每一個重新執(zhí)行最內(nèi)部的功能。這是一個取消嵌套函數(shù)的修復:
$('.inputitem').on('keyup', function(){
var _inputitem = $(this);
var _inputitem_arr = $(this).attr('id').split('_');
var _inputitem_col = _inputitem_arr[0];
//whichever column this cell is in is the column we need to re-sum
var active_col = _inputitem_col
/*SUM SCRIPT*/
var sum_item = 0;
//iterate through each input cell
$('.inputitem').each(function(i){
var _inputitem = $(this);
var _inputitem_arr = $(this).attr('id').split('_');
var _inputitem_col = _inputitem_arr[0];
//check whether the current input cell is in the active column
if(_inputitem_col == active_col){
//if so, add it to our partial sum
var inputitem_val = parseFloat($(this).val().replace(',', ''));
sum_item += inputitem_val;
}
});
//find and update only the relavent sum cell
$('.totalitem').each(function(i){
var _totalitem = $(this);
var _totalitem_arr = $(this).attr('id').split('_');
var _totalitem_col = _totalitem_arr[1];
if(_inputitem_col == _totalitem_col){
_totalitem.val(sum_item);
}
});
/*END SUM SCRIPT*/
});

TA貢獻1841條經(jīng)驗 獲得超3個贊
$('.inputitem').on('keyup', function(){
var _inputitem_arr = $(this).attr('id').split('_');
var _inputitem_col = _inputitem_arr[0];
var $totlaSelector = '#total_' + _inputitem_col;
var $ColTotal = 0;
$('[id^="'+_inputitem_col+'"]').each(function(i){
var $thisVal = 0;
if($(this).val() != ''){
$thisVal = parseInt($(this).val());
}
$ColTotal = $ColTotal + $thisVal;
});
$($totlaSelector).val($ColTotal);
});
我已經(jīng)在 keyup 事件上更新了你的 jQuery。
- 2 回答
- 0 關(guān)注
- 157 瀏覽
添加回答
舉報