Đây là câu hỏi về những gì đang xảy ra trong mã của tôi. Nó hoạt động, nhưng tôi cần một chút giác ngộ ...JavaScript, jQuery và 'this': những gì đang xảy ra ở đây?
Tôi đang sử dụng jQuery để tạo trình xử lý sự kiện trên phần tử nhập văn bản. HTML đơn giản sẽ như sau:
<input type="text" id="autocomplete" size="50" />
tôi cần phải nhận được sự kiện bất cứ khi nào ai đó một cái gì đó vào lĩnh vực đó, và để tránh bị ngập lụt với các sự kiện tôi đã thiết lập các event listener với một bộ đếm thời gian để cho sự kiện của tôi đang nghe chỉ chạy nếu người dùng đã không gõ bất cứ điều gì cho 125 ms:
jQuery('#autocomplete').keyup(function(e) {
e.preventDefault();
clearTimeout(this.timer);
this.timer = setTimeout(function() {
jQuery.getJSON([URL goes here], function(data) {
// processing of returned data goes here.
}
}, 125);
console.log(this);
});
này hoạt động, nhưng tôi không hoàn toàn chắc chắn nếu tôi hiểu tất cả mọi thứ xảy ra ở đây. Như bạn thấy từ đoạn mã trên, tôi cần theo dõi ID
của bộ hẹn giờ đã được tạo trên sự kiện cuối cùng. Tôi làm điều đó bằng cách lưu trữ nó trong this.timer
. Tuy nhiên, từ khóa this
trong trường hợp này đề cập đến yếu tố đầu vào. Đây là những gì console.log
kết quả đầu ra:
<input type="text" id="autocomplete" size="50" />
Is it OK để lưu trữ các timer ID
trên các yếu tố đầu vào? Đối với tất cả những gì tôi biết, tôi có thể làm điều gì đó ngu ngốc. Đây có phải là "thực hành tốt nhất" hay điều gì đó rất khác biệt?
Cảm ơn câu trả lời của bạn! – sbrattla