Mỗi câu trả lời đều thiếu một số điểm, vì vậy đây là giải pháp của tôi:
$("#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>
Các Input Event
vụ cháy trên đầu vào Bàn phím , Kéo chuột , Tự động điền và Sao chép-Dán đã được thử nghiệm trên Chrome và Firefox. Kiểm tra giá trị trước đó làm cho nó phát hiện các thay đổi thực sự, có nghĩa là không bắn khi dán cùng một thứ hoặc gõ cùng một ký tự, v.v.
Ví dụ hoạt động: http://jsfiddle.net/g6pcp/473/
cập nhật:
Và nếu bạn muốn chạy change function
chỉ khi người dùng nhập xong và ngăn thực hiện hành động thay đổi nhiều lần, bạn có thể thử điều này:
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">
Nếu người dùng bắt đầu nhập (ví dụ: "foobar"), mã này sẽ ngăn bạn change action
chạy cho mọi loại người dùng chữ cái và chỉ chạy khi người dùng dừng gõ, Điều này đặc biệt tốt khi bạn gửi đầu vào đến máy chủ (ví dụ: đầu vào tìm kiếm), đó là cách máy chủ không chỉ có một tìm kiếm foobar
và không sáu tìm kiếm f
và sau đó fo
và sau đó foo
và foob
vân vân.