У меня есть ввод текста
в jQuery я хочу знать, если это возможно, чтобы получить значение ввод текста
(тип=число
и тип=текст
) до `onChange, после чего происходит, а также узнать значение той же входной текст после onChange, после чего происходит. Это с помощью jQuery.
Что я пробовал:
Я пробовал сохранение значения переменной после вызова onChange, после чего это значение, но я получаю пустое значение.
Самый простой способ-это сохранить исходное значение, используя данные ()`, когда элемент получает фокус. Вот очень простой пример:
JSFiddle:
$('input').on('focusin', function(){
console.log("Saving value " + $(this).val());
$(this).data('val', $(this).val());
});
$('input').on('change', function(){
var prev = $(this).data('val');
var current = $(this).val();
console.log("Prev value " + prev);
console.log("New value " + current);
});
Примечание: это обычно более эффективно использовать делегированный обработчик событий, когда там может быть несколько одинаковых элементов. Таким образом, только один обработчик добавляется (меньше затрат и быстрее инициализация), а разница скорости во время мероприятия является незначительным.
Вот тот же пример, используя делегированные события, связанные с Документ
:
$(document).on('focusin', 'input', function(){
console.log("Saving value " + $(this).val());
$(this).data('val', $(this).val());
}).on('change','input', function(){
var prev = $(this).data('val');
var current = $(this).val();
console.log("Prev value " + prev);
console.log("New value " + current);
});
JsFiddle:
65/Делегированные события работы путем прослушивания события (объектив
, изменение
и т. д.) На предка элемента ("документ" в этом случае), а затем применяя фильтр на jQuery (вход
) только элементы в цепи пузырь после применения функции только те элементы согласования, что вызвало событие*.
Примечание: общее правило, использовать "документ" в качестве значения по умолчанию для делегированных событий, а не тело. "тело" есть ошибка, делать укладки, которые могут вызвать его, чтобы не пузырились событий мыши. Также "документ" всегда существует так что вы можете прикрепить к нему снаружи дом готов обработчик* :)
Наверняка вам будет необходимо хранить старое значение вручную, в зависимости от того, какой момент вы заинтересованы (перед упором, с последнего изменения). Начальное значение можно взять из свойства DefaultValue:
function onChange() {
var oldValue = this.defaultValue;
var newValue = this.value;
}
Значение прежде чем перейти к рассмотрению могут быть приняты как показано в ушел кодирования'ы ответ. Но вы должны иметь в виду, что значение может быть изменено без фокусировки.
мое решение здесь
function getVal() {
var $numInput = $('input');
var $inputArr = [];
for(let i=0; i < $numInput.length ; i++ )
$inputArr[$numInput[i].name] = $numInput[i].value;
return $inputArr;
}
var $inNum = getVal();
$('input').on('change', function() {
// inNum is last Val
$inNum = getVal();
// in here we update value of input
let $val = this.value;
});
Просто положить начальное значение в атрибуте данных при создании текстового поля, например
В формате HTML
<input id="my-textbox" type="text" data-initial-value="6" value="6" />
На jQuery
$("#my-textbox").change(function () {
var oldValue = $(this).attr("data-initial-value");
var newValue = $(this).val();
});