2011-05-24 21 views
3

我有兩套這樣的輸入字段,可以通過類區分的:jQuery:如何從相應數組的每個文本輸入字段中減去數字值?

<div> 
<input type="text" class="columnone" /> 
<input type="text" class="columnone" /> 
<input type="text" class="columnone" /> 
</div> 

<div> 
<input type="text" class="columntwo" /> 
<input type="text" class="columntwo" /> 
<input type="text" class="columntwo" /> 
</div> 

必要驗證到位,以確保只有整數值可以由用戶在這些字段被輸入。

如何從在.columnone相應的字段上change()在特定.columntwo文本字段中的值中減去每個輸入字段的.columntwo價值?空值應該被視爲零。

例如,在第一輸入字段change()columntwo,從第一場中.columntwo減去在.columntwo第一輸入字段的值。其他領域保持不變。

在此先感謝!

+0

難道你不希望添加的類'columnone'和'columntwo'到包裝div,而不是每個輸入元素? – 2011-05-24 07:14:55

回答

2

這是一個有點令人費解,但它會奏效。這適用於要觸發功能兩種方式(columntwo和columnone)

$('.columnone, .columntwo').change(function() { 
    var $this = $(this); 
    var sum = 0; 
    var index = $this.index(); 

    if ($this.hasClass('columnone')) { 
     var val1 = parseInt($this.val(), 10); 
     var val2 = parseInt($('.columntwo:eq(' + index + ')').val(), 10); 
    } else { 
     var val2 = parseInt($this.val(), 10); 
     var val1 = parseInt($('.columnone:eq(' + index + ')').val(), 10); 
    } 

    val1 = (isNaN(val1)) ? 0 : val1; 
    val2 = (isNaN(val2)) ? 0 : val2; 

    sum = val2 - val1; 
    //console.log(sum); 
    alert(sum); 
}); 

這裏的假設是小提琴:http://jsfiddle.net/fJLAw/

+0

+1,我認爲你應該使用'parseFloat'而不是 – diEcho 2011-05-24 07:17:32

+0

@diEcho Yup,但是我使用了parseInt,因爲OP提到了整數。 – JohnP 2011-05-24 07:18:53

+0

當我使用它時,所有'.columntwo'值總是從'.columnone'的第一個輸入字段中減去。 – Stroller 2011-05-24 07:26:39

3

下,你沒有帶班columnone或columntwo任何其他元素的假設,你可以做

$('input.columntwo').change(function() { 
    var $this = $(this); 
    $this.val(parseInt($('input.columnone').eq($this.index()).val(),10) - parseInt($this.val(),10)); 
}); 
+0

+1簡單快捷的解決方案。使用'parseFloat'代替'parseInt' – diEcho 2011-05-24 07:14:49

+0

+1非常簡潔。 – JohnP 2011-05-24 07:15:27

+0

謝謝。這似乎並沒有工作,當我用'var差異='第3行,然後'警報(差異);' – Stroller 2011-05-24 07:19:09

相關問題