В каждом ответе не хватает некоторых моментов, поэтому вот мое решение:
$("#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
и так далее.