2015-07-23 3 views
2

У меня есть номер типа входного сигналапроверка JQuery, если входное значение увеличивается/уменьшается на изменениях

<input type="number" value="5" id="nmovimentos"/> 

Я хочу сделать especific действия, когда значение увеличивается или уменьшается (предупреждения для более простого примера).

У меня есть следующий код JQuery:

$(document).ready(function(){ 
    var oldValue = $("#nmovimentos").val(); 
    $("#nmovimentos").change(function(){ 
    var newValue = $(this).val(); 
    if (newValue > oldValue) 
     alert("increase!"); 
    else 
     alert("decrease!"); 
    }); 
}); 

Но это не работает, потому что он не может обнаружить вар OldValue .. поэтому любые подсказки о том, как сделать это? Большое спасибо!

Jsfiddle

+0

Вы могли бы использовать что-то вроде https://github.com/Xaxis/jquery.eye отслеживать изменения любого атрибута элемента, а затем реагировать так, как вам нравится. В случае jquery.eye как старое значение, так и новое значение передаются как параметры для обратного вызова. – Xaxis

ответ

2

Вы можете использовать какую-то собственность каждого HTMLInputElement должно хранить предыдущее значение, например defaultValue. В этом случае вы сохраните несколько строк кода, и сделать код немного чище и лаконичным:

$("#nmovimentos").change(function() { 
 
    var direction = this.defaultValue < this.value 
 
    this.defaultValue = this.value; 
 
    if (direction) alert("increase!"); 
 
    else alert("decrease!"); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type="number" value="5" id="nmovimentos" />

+1

приятно !, узнал что-то новое! – AmmarCSE

+0

поэтому 'defaultValue' всегда является предыдущим значением? – AmmarCSE

+0

Нет, обычно defaultValue является начальным значением, но в этом случае оно является предыдущим, потому что мы переназначаем его с помощью this.defaultValue = this.value; '. Не предназначенное его использование, но оно часто не используется. – dfsq

3

Обновление oldValue в обработчике

$(document).ready(function() { 
 
var oldValue = $("#nmovimentos").val(); 
 
    $("#nmovimentos").change(function() { 
 
    var newValue = $(this).val(); 
 
    if (newValue > oldValue) 
 
     console.log("increase!"); 
 
    else 
 
     console.log("decrease!"); 
 

 
    oldValue = newValue; 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.0/jquery.min.js"></script> 
 
<input type="number" value="5" id="nmovimentos" />

Или используйте атрибут data-*, чтобы сохранить трек

$(document).ready(function() { 
 
    $("#nmovimentos").attr('data-prev-val', $("#nmovimentos").val()); 
 
    $("#nmovimentos").change(function() { 
 
    var newValue = $(this).val(); 
 
    if (newValue > $(this).attr('data-prev-val')) 
 
     console.log("increase!"); 
 
    else 
 
     console.log("decrease!"); 
 

 
    $("#nmovimentos").attr('data-prev-val', newValue); 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.0/jquery.min.js"></script> 
 
<input type="number" value="5" id="nmovimentos" />

+0

Я не могу поверить, что это было что-то настолько простое, как макияж, чтобы перевернуть старую ценность в конце! Thak вы очень :) –

1

Вам нужно сначала сохранить старое значение. jQuery.data() удобен для этого.

$(document).ready(function(){ 
 
    var nmovimentos = $("#nmovimentos"); 
 
    var oldValue = nmovimentos.val(); 
 
    nmovimentos.data("oldValue", oldValue); 
 
    
 
    $("#nmovimentos").change(function(){ 
 
    var oldValue = $(this).data("oldValue"); 
 
    var newValue = $(this).val(); 
 
    if (newValue > oldValue) 
 
     alert("increase!"); 
 
    else 
 
     alert("decrease!"); 
 
    $(this).data("oldValue", newValue); 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<input type="number" value="5" id="nmovimentos"/>

Смежные вопросы