2012-06-23 35 views
5

Tôi có một đầu vào trên một trang HTML, nơi một người sẽ gõ một cái gì đó và những gì tôi muốn là cho một chức năng được gọi là mỗi khi họ ngừng gõ. Tôi biết về sự kiện onkeypress, nhưng điều đó được gọi mỗi khi một ký tự được gõ. Dưới đây là một ví dụ về những gì tôi muốn:Làm cách nào để gọi một chức năng sau khi một người ngừng nhập?

  1. loại Person "này là một thử nghiệm" vào đầu vào
  2. Sau khi người đó ngừng đánh máy, chức năng foo() nên được gọi là
  3. loại Person cái gì khác vào đầu vào
  4. Sau khi người đó ngừng đánh máy, chức năng foo() nên được gọi là
  5. Lặp lại ....

đây có phải là có thể?

Cảm ơn rất nhiều!

+7

Xác định "người đã dừng nhập" ... – Oded

+2

bạn có thể xử lý sự kiện lấy nét bị mất. Nhưng không phải người dừng nhập –

+0

@Oded - Giống như họ gõ "đây là một bài kiểm tra", sau đó dừng nhấn phím trên bàn phím. Vì vậy, nên có thể có một sự chậm trễ thứ hai. – Nate

Trả lời

10

Nghe onkeyupevent. Có bắt đầu một thời gian chờ (bạn phải xác định "dừng" như một số tiền thời gian, nếu không nó sẽ được gọi là tại mỗi khóa), và trong thời gian chờ thực hiện chức năng của bạn.

Nếu onkeydown được gọi trong khi bộ hẹn giờ của bạn đang chạy, hãy dừng nó.

Cái gì đó như ...

var timer; 

function onKeyUpHandler(e){ 
    timer = setTimeout("foo()", 500)  
} 

function onKeyDownHandler(e) { 
    clearTimeout(timer); 
} 

Làm thế nào mã này chính xác phụ thuộc vào nơi trông và làm thế nào bạn đang sử dụng nó ... chỉ để hiển thị một cách để làm điều đó.

+0

Ixx - Cảm ơn, điều này là rất tốt, nhưng tôi dường như không thể làm cho nó hoạt động: http : //jsfiddle.net/j35ba/ – Nate

+0

cho tôi một giây, tôi sẽ kiểm tra nó – Ixx

+0

ah, tên của các chức năng là sai! bởi vì các hàm gọi chúng có cùng tên, vì vậy chúng gọi lại cho đến khi bạn nhận được lỗi vượt quá stack. thay đổi tên của các hàm. – Ixx

0

Chỉ cần đặt bộ hẹn giờ javascript để bắt đầu/khởi động lại trên onKeyPress. Sau đó, chỉ cần xác định khoảng thời gian định nghĩa "ngừng nhập" và chạy tập lệnh của bạn.

0

Trước tiên, hãy nắm bắt sự kiện "khóa" và đặt biến "stopTyping" thành true. Sau đó, thiết lập một bộ đếm thời gian (bao lâu bạn muốn chờ đợi trước khi xem xét điều này là một sự kiện "ngừng gõ").

Nếu, trước khi hẹn giờ đi tắt, bạn chụp một "chìa khóa xuống" sự kiện, thiết lập "stoppedTyping = false"

Khi hẹn giờ đi hết hạn, hẹn giờ bạn gọi lại có thể kiểm tra giá trị của "stoppedTyping". Nếu đó là sự thật, thì người dùng đã ngừng nhập (hoặc chính xác hơn, chưa nhập bất kỳ ký tự mới nào trong khoảng thời gian của bộ hẹn giờ). Nếu đó là sai, sau đó họ đã không ngừng gõ - họ phải đã gõ ít nhất một char nhiều hơn trong khi bộ đếm thời gian của bạn đang chạy.

0

Nếu tôi hiểu rõ, "ngừng nhập" có nghĩa là "không có tổ hợp phím trong một khoảng thời gian nhất định". Trong trường hợp này, bạn phải sử dụng bộ hẹn giờ: http://jsfiddle.net/xnghR/1/

Các vấn đề liên quan