jQuery: Как вычесть числовые значения каждого поля ввода текста в массиве из значений соответствующего массива?

#jquery

#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>
  

Существуют необходимые проверки, гарантирующие, что пользователь может вводить в эти поля только целочисленные значения.

Как мне вычесть значение каждого поля ввода в .columntwo из значения в соответствующем поле в .columnone on change() в этом конкретном .columntwo текстовом поле? Значения Null следует считать равными нулю.

Например, включив change() в первое поле ввода в columntwo , вычтите значение первого поля ввода в .columntwo из первого поля в .columntwo . Остальные поля остаются неизменными.

Заранее спасибо!

Комментарии:

1. Разве вы не хотите добавить классы columnone и columntwo в обтекающий div, s вместо каждого элемента ввода?

Ответ №1:

В предположении, что у вас нет других элементов с классами columnone или columntwo, вы можете сделать

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

Комментарии:

1. 1 для простого и быстрого решения. parseFloat вместо этого используйте ‘parseInt`

2. Спасибо. Похоже, это не работает, когда я добавляю в строку 3 ‘var difference =’, а затем ‘alert (разница);’

Ответ №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 /

Комментарии:

1. @diEcho Да, но я использовал parseInt, потому что в OP упоминались целые числа.

2. Когда я использую это, все .columntwo значения всегда вычитаются из первого поля ввода .columnone .

3. @Stroller вы имеете в виду в скрипте или в вашем коде? У меня скрипка работает нормально