2012-03-13 41 views
8

Xin chào tất cả mọi người tôi chỉ nhặt jQueryPhím dừng lặp lại khi giữ. (JQuery)

Vì vậy, câu hỏi của tôi là tôi muốn dừng lại một chìa khóa từ lặp đi lặp lại khi bạn giữ nó xuống

Ví dụ: Chỉnh sửa (i muốn nó dừng lại .. vì vậy 1 nhân vật mỗi phím nhấn/KeyDown)

nhấn phím: một holddown

: aaaaaaaaaaaaaaaaaaaaaaaaaaaaa

mã của tôi là:

<input type='text'> 

var stop= false; 
var time =null; 
$(':text').keypress(function(e) { 
if(stop === true){e.preventDefault();} 
    if (time !== null) { 
     lastkey = time; 
    } 
    time = new Date().getTime(); 
    var between = time - lastkey; 
    if (between <= 70) { 
     stop = true; 
    } 
}); 
$(':text').keyup(function(){stop = false;}); 

Tôi đang đi về điều này một cách sai lầm?

+1

có thể trùng lặp của [Ngăn chặn Javascript sự kiện KeyDown khỏi bị xử lý nhiều lần trong khi tổ chức xuống] (http://stackoverflow.com/questions/6087959/prevent-javascript -keydown-event-from-being-handling-multiple-times-while-held-do) – Isti115

Trả lời

4

Hãy thử cách này: http://jsfiddle.net/maniator/yFA8c/

Nó sẽ chỉ cho phép một chữ cái mỗi 2 giây.

Code:

var mult = false, 
    prev = 0; 

$('.mult').keydown(function(e) { 
    if (!mult) { 
     mult = true; 
     prev = e.which; 
     setTimeout(function() { 
      mult = false; 
     }, 2000) 
    } 
    else if (prev != e.which) { 
     mult = false; 
    } 
    else { 
     return false; 
    } 
})​;​ 
+0

Tại sao không sử dụng .keyup() thay thế? Tất nhiên, bạn sẽ chỉ gõ khi bạn phát hành, nhưng tôi nghi ngờ sự khác biệt là quá quan trọng đối với hầu hết mọi người gõ ở tốc độ bình thường. –

+0

thay vì ngăn chặn "x" giây, chỉ cần vô hiệu hóa sự kiện keydown nếu cùng một phím được nhấn trước, như tôi đã làm –

+0

@RafaelVerger có trong mã của tôi rồi ... – Neal

8

Sử dụng .keyup() ràng buộc thay vì .keypress().

+0

nếu chỉ có sự kiện keyup được sử dụng, bạn không thể ngăn các hành động mặc định cho các sự kiện nhấn phím và bấm phím –

+0

Brilliant! Tôi sử dụng keydown cho các phím mũi tên con trỏ, nhưng keyup cho tất cả mọi thứ khác! –

2

Bạn nên sử dụng các sự kiện keydown và keyup thay vì nhấn phím.

Vì vậy, đây là một giải pháp:

window.keypressed = {}; 
$('#element').keydown(function(e){ 
    if (window.keypressed[e.which]) { 
    e.preventDefault(); 
    } else { 
    window.keypressed[e.which] = true; 
}).keyup(function(e){ 
    window.keypressed[e.which] = false; 
}); 
+0

@ user1267070 kiểm tra mã này ... nó sẽ ngăn chặn bất kỳ khóa nào được in nhiều lần trong một trường văn bản –

+1

Thực hiện tốt, đơn giản và rõ ràng. Tôi đã sử dụng var charCode = (typeof e.which === "number")? e.which: e.keyCode; sau đó sử dụng charCode thay vì e.which. – DeadlyChambers

+0

Cũng được thực hiện @DeadlyChambers, nhưng khi bạn sử dụng jQuery 'e.which' là mã bàn phím đã được xử lý (theo cách trình duyệt chéo) –

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