2009-09-04 40 views
23

Xin chào các bậc thầy vĩ đại của trang web :) Bây giờ, tôi đã có một câu hỏi ngu ngốc mới, và tôi xin tha thứ cho tôi. Tôi đọc ở khắp mọi nơi về giải pháp này, nhưng không tìm thấy giải pháp phù hợp với tôi.Thời gian trễ của JavaScript trên KeyKeyUp?

Tôi đã có:

<input name="domain" type="text" id="domain" onKeyUp="javascript:chk_me();"> 

Tất cả tôi đang hỏi là làm thế nào để làm điều này không phải để kiểm tra sau khi một nút được nhấn, nhưng sau khi nói 1000 miliseconds của bàn phím không hoạt động?

Trả lời

34

Hãy thử điều này:

var timer; 
function chk_me(){ 
    clearTimeout(timer); 
    timer=setTimeout(function validate(){...},1000); 
} 

Bằng cách này mỗi khi một phím được nhấn, thời gian chờ sẽ bị xóa và thiết lập một lần nữa.

+2

Tôi nghĩ rằng 'var timer' cần phải được bên ngoài cơ quan chức năng – Rodrigo

+0

bạn đúng hẹn giờ phải được đặt bên ngoài chức năng, tôi đã chỉnh sửa câu trả lời – mck89

+0

Cảm ơn! Câu trả lời tốt nhất của lô bằng lãi công bằng. – Shog9

-2

setTimeout() sẽ là một trong;)

<input name="domain" type="text" id="domain" onKeyUp="setTimeout('chk_me()',1000);"> 

link text

+0

này sẽ không duy trì giá trị của 'this' biến bối cảnh khi gọi 'chk_me()'. Ngoài ra, bằng cách sử dụng biến thể của 'setTimeout()' mà lấy và đánh giá một chuỗi chứa mã là cả hai vô nghĩa trong kịch bản này và lộn xộn trong tất cả các kịch bản. – Shog9

+0

Xin chào Berzemus, cảm ơn bạn đã trả lời. Tôi đã sẵn sàng thử điều này. Nó hoạt động, nhưng vấn đề là nó không trì hoãn việc thực thi kịch bản. Nó trì hoãn sau mỗi lần nhấn phím duy nhất ... – Spoonk

16

Một cách tiếp cận, mà không globals:

var typewatch = function(){ 
    var timer = 0; 
    return function(callback, ms){ 
     clearTimeout (timer); 
     timer = setTimeout(callback, ms); 
    } 
}(); 

Cách sử dụng:

Gắn sự kiện này thông qua JavaScript:

window.onload = function() { 
    document.getElementById('domain').onkeyup = function() { 
     typewatch(function(){alert('Time elapsed!');}, 1000); 
    }; 
}; 

Hoặc sử dụng một event handler inline (không quá nhiều khuyến cáo) như bạn có trong ví dụ:

<input type="text" name="domain" id="domain" 
    onKeyUp="typewatch(function(){alert('Time elapsed!');}, 1000);"/> 

Thử bản demo here.

+1

Điều gì khiến bạn nghĩ rằng máy đánh chữ không phải là toàn cầu? –

+1

yes typewatch là toàn cầu, nhưng ý tôi là biến ** timer ** không nằm trong phạm vi toàn cầu, và chỉ có thể truy cập bằng chức năng máy đánh chữ. – CMS

0

Bài đăng thực sự hữu ích!

Một cách tiếp cận mà không globals, sử dụng chức năng thuộc tính:

function chk_me(){ 
    if(typeof timer !== undefined){ 
    clearTimeout(this.timer); 
    } 
    this.timer=setTimeout(function validate(){validate(...)},1000); 
} 
Các vấn đề liên quan