2015-12-21 14 views
8

Tôi có một hộp văn bản nơi người dùng chỉ có thể nhập dữ liệu số. Tôi đang sử dụng các chức năng sau trên KeyUp của hộp văn bản:Sự chậm trễ sự kiện keyup trên đầu vào của người dùng

$('#ssn').keyup(function() { 
    var val = this.value.replace(/\D/g, ''); 
    this.value = val; 
}); 

Vấn đề tôi đang chạy vào là lag khi người sử dụng phím lên trên một phím hạn chế, hiển thị ký tự cho một khoảnh khắc trước khi nó thay thế bằng chuỗi rỗng. Và giữ một phím sẽ hiển thị một dòng các ký tự trong hộp cho đến khi khóa được giải phóng. Có cách nào để ngăn chặn hành vi này không? Tôi đã thử các sự kiện bàn phím khác nhau như phím tắt hoặc nhấn phím và chúng dường như không hoạt động tốt hơn. Đây là một fiddle của vấn đề: https://jsfiddle.net/oxpy96g9/

+0

các 'lag' là không thể tránh khỏi là 'Keyu Sự kiện p' không kích hoạt cho đến khi khóa được giải phóng và giá trị được thêm vào trường nhập. –

+0

1. Một sự suy giảm được giới thiệu thông qua jQuery 2. Một sự suy giảm được giới thiệu thông qua khai báo biến lặp lại 3. Sự chậm lại được giới thiệu thông qua việc kích hoạt máy JavaScript Regex 4. Mã của bạn chạy SAU KHI người dùng nhả phím, trông giống như một sự chậm lại. Tất cả trong tất cả, bạn đã viết một mớ hỗn độn. –

+3

Hãy thử nghe sự kiện 'đầu vào' thay vào đó ...' $ ('# ssn'). On ('input', function() {...}); ' –

Trả lời

9

Chuyển đổi nhận xét của tôi đến một câu trả lời

Thay vì lắng nghe sự kiện keyup, lắng nghe những input event để sự kiện này phát sinh khi thay đổi giá trị chứ không phải là khi phím được nhả:

Updated Example

$('#numbers').on('input', function() { 
    this.value = this.value.replace(/\D/g, ''); 
}); 
+0

đã dùng thử! công việc tuyệt vời! – brandelizer

+0

Ồ chờ đã. Tôi đã thử điều này trong jsfiddle, nhưng dường như nó đã bị tụt hậu, vì vậy nó không xử lý nhấp chuột của tôi vào nút "chạy" sau khi tôi đã chỉnh sửa nó để kiểm tra: D – nicael

+0

Làm việc như một say mê, cảm ơn bạn. – noclist

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