Setiap jawaban kehilangan beberapa poin, jadi inilah solusi saya:
$("#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>
The Input Eventkebakaran di Keyboard input, mouse Drag , Autofill dan Copy-Paste diuji pada Chrome dan Firefox. Memeriksa nilai sebelumnya membuatnya mendeteksi perubahan nyata, yang berarti tidak menembak ketika menempelkan hal yang sama atau mengetik karakter yang sama atau lain-lain.
Contoh kerja: http://jsfiddle.net/g6pcp/473/
memperbarui:
Dan jika Anda ingin menjalankan change function hanya saat pengguna selesai mengetik dan mencegah memecat tindakan perubahan beberapa kali, Anda dapat mencoba ini:
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">
Jika pengguna mulai mengetik (mis. "Foobar") kode ini mencegah Anda change actionuntuk menjalankan untuk setiap jenis pengguna huruf dan dan hanya berjalan ketika pengguna berhenti mengetik, Ini bagus khususnya ketika Anda mengirim input ke server (mis. Input pencarian), yang cara Server tidak hanya satu pencarian foobardan tidak enam pencarian untuk fkemudian fodan kemudian foodan foobdan sebagainya.