#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 вы имеете в виду в скрипте или в вашем коде? У меня скрипка работает нормально