2013-10-10 92 views
1

我陷入了一個有趣的問題。我有一個3列和一些行的表。每行都添加了一個Click事件,該事件由Drupal tablefield模塊支持,該事件使ajax調用來增加行數。在2列中它接受數字數據,我的jQuery代碼在第三列進行計算。但隨着行數的增加,keyup函數變得非常慢,但對於前幾行,它工作正常。下面是我的jQuery代碼片段:jQuery的密碼功能反應很慢

$('#edit-field-project-resrc-budget-fund input.tablefield-col-1, #edit-field-project-resrc-budget-fund input.tablefield-col-2').keyup(function(index,value){ 
    var sum_cell_column; 
    var $tr = $(this).closest('tr');   
    var Row = $tr.index(); 
    var cell_value1=Number($('#edit-field-project-resrc-budget-fund input#tablefield_0_cell_'+Row+'_1').val().replace(/[^0-9\.]+/g,"")); 
    var cell_value2=Number($('#edit-field-project-resrc-budget-fund input#tablefield_0_cell_'+Row+'_2').val().replace(/[^0-9\.]+/g,"")); 
    sum_cell_column =(cell_value1+cell_value2); 
    $('#edit-field-project-resrc-budget-fund input#tablefield_0_cell_'+Row+'_3').val(sum_cell_column).formatCurrency(); 
}); 

有沒有人有一個想法如何解決這個問題?

+0

嘗試'$( '#編輯場項目RESRC預算基金')。在( 'KEYUP', 'tablefield-COL-1,.tablefield-COL-2') .keyup(function(e){$ {$ tr = $(this).closest('tr'); var cell_value1 = Number($ tr.find('。tablefield-col-1')。val()。替換(/ [^ 0-9 \。] +/g,「」)); var cell_value2 = Number($ tr.find('.tablefield-col-2').val()。replace(/ [^ 0-9 \。] +/g,「」)); var sum_cell_column =(cell_value1 + cell_value2); $ tr.find('。tablefield-col-3').val(sum_cell_column).formatCurrency(); });' –

+0

它是一個非常乾淨的版本,並且還假設輸入和域h作爲班級'tablefield-col-3' –

+0

你有多少行,你說的「超級慢」是什麼意思? –

回答

1

我認爲你會受益於on方法,所以你沒有附加太多的聽衆。在輸入標籤上使用帶有過濾器的on意味着將只附加一個事件偵聽器。

請參見: http://api.jquery.com/on/

簽名:

.on(events [, selector ] [, data ], handler(eventObject)) 

樣品:

$('#edit-field-project-resrc-budget-fund').on('keyup', 'input', function() { 
    var $this = $(this), 
     $tr = $this.closest('tr'), 
     row = $tr.index(); 

    var makeId = function(index, pos) { 
     return 'tablefield_0_cell_' + index + '_' + pos; 
    }; 

    var cell_value1=Number($('#'+ makeId(row, 1)) 
          .val().replace(/[^0-9\.]+/g,"")); 
    var cell_value2=Number($('#'+ makeId(row, 2)) 
          .val().replace(/[^0-9\.]+/g,"")); 
    var sum_cell_column =(cell_value1+cell_value2); 

    $('#'+ makeId(row, 3)) 
     .val(sum_cell_column).formatCurrency(); 
    }); 

演示:

這裏是一個JSBin展示這一點。使用按鈕創建許多行並注意性能是否正常。

http://jsbin.com/oMEKaKu/4/

+0

什麼是一個清晰的解釋非常感謝你它的作品非常讚賞! –