2011-05-24 18 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

相关问题