Есть ли хороший способ сделать это? Можете ли вы отправить исходное значение, а также новое значение функции jquery/javascript? Сохранение старого значения в некоторой глобальной переменной просто немного беспорядочно.
EDIT: код контекста
<input type='number' onchange='foo(...)'>
...
<script type=text/javascript>
function foo(...){
if(old > new){
alert('decreased');
}else{
alert('increased');
}
}
</text>
Поэтому не храните его в глобальной переменной:
<input type="number" value="5" />
$('input[type="number"]').change(function () {
if (this.getAttribute('value') === this.value) {
// setting the original 'lastvalue' data property
$(this).data('lastvalue', this.value);
} else {
// take whatever action you require here:
console.log(this.value < $(this).data('lastvalue') ? 'decrement' : 'increment');
// update the lastvalue data property here:
$(this).data('lastvalue', this.value);
}
}).change();
Вместо этого вы могли бы вместо this.getAttribute('value') === this.value
использовать this.defaultValue === this.value
(как в этой демонстрации JS Fiddle), this.defaultValue
является исходным значением элемент на DOM-ready.
Рекомендации:
this.getAttribute('lastvalue')
не должно быть this.getAttribute('lastvalue')
?
if
просто устанавливает свойство lastvalue
объекта данных при первом запуске (инициируется change()
в последней строке цепочки). (* метод data()
будет иметь некоторые свойства, равные атрибутам с префиксом data-*
, если они существуют, но не будет обновлять эти атрибуты и сохранит их в объекте для последующего доступа.)