У кожній відповіді відсутні деякі моменти, тому ось моє рішення:
$("#input").on("input", function(e) {
var input = $(this);
var val = input.val();
if (input.data("lastval") != val) {
input.data("lastval", val);
//your change action goes here
console.log(val);
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="input">
<p>Try to drag the letters and copy paste</p>
У Input Event
пожежах на клавіатури введення, довгий миша , автозаповнення і Copy-Paste протестовані на Chrome і Firefox. Перевірка попереднього значення змушує його виявляти реальні зміни, що означає не стріляти під час вставки однієї речі чи введення одного і того ж символу чи т.д.
Приклад роботи: http://jsfiddle.net/g6pcp/473/
оновлення:
І якщо ви хочете запускати свою програму change function
лише тоді, коли користувач закінчує вводити та запобігати запуску дії зміни кілька разів, ви можете спробувати це:
var timerid;
$("#input").on("input", function(e) {
var value = $(this).val();
if ($(this).data("lastval") != value) {
$(this).data("lastval", value);
clearTimeout(timerid);
timerid = setTimeout(function() {
//your change action goes here
console.log(value);
}, 500);
};
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="input">
Якщо користувач починає вводити текст (наприклад, "foobar"), цей код заважає change action
виконувати всі типи букв користувача і працює лише тоді, коли користувач перестає вводити текст, це добре спеціально для того, коли ви надсилаєте вхід на сервер (наприклад, пошукові вводи), процесорний сервер робить тільки один пошук , foobar
а не шість пошуків , f
а потім , fo
а потім foo
і foob
і так далі.