2010-05-31 33 views
6

là có thể (qua trình duyệt tương thích) để CANCEL một phím tắt sau khi người dùng đã làm cho nó (ví dụ trên textbox)Hủy bỏ một phím tắt trong jQuery

Mã Tôi hiện đang sử dụng chỉnh sửa giá trị textbox sau các tổ hợp phím đã được hiển thị:

$('.number').keypress(function() { 
    this.value = this.value.replace(/[^0-9\.]/g, ''); 
}); 

Trả lời

4

SOLVED (AND CẬP NHẬT)

Xin lỗi, tôi đã không kiểm tra tùy chọn hiển nhiên nhất - đã làm việc:

$('.number').keypress(function(event) { 
    return /[0-9\.]/.test(String.fromCharCode(event.keyCode)); 
}); 
+1

+1 Đây là cách để thực hiện nếu bạn không muốn xem nhanh mục bị cấm. Bạn có thể làm sạch nó một chút bằng cách sử dụng 'test()', như thế này: '/ [^ 0-9 \.] /. Test (String.fromCharCode (event.keyCode))'. Không cần thay thế hoặc chuyển nhượng vì bạn đang làm 'return false;'. Bạn cũng không cần sử dụng từ định danh toàn cầu 'g', vì bạn đang thử nghiệm một sự kiện quan trọng. – user113716

+0

Cảm ơn, tôi đã cập nhật câu trả lời của tôi với đề xuất của bạn với một thay đổi nhỏ - loại bỏ carrat (^) khỏi regex vì điều đó sẽ đảo ngược kết quả của bài kiểm tra :) Được đánh giá cao! – Jimbo

4
$('.number').keypress(function() { 
    if (this.value == 'foobar'){ 
     // "Cancel" keystroke 
     return false; 
    } 
    this.value = this.value.replace(/[^0-9\.]/g, ''); 
}); 
+0

Điều này sẽ không hiệu quả. Bạn sẽ cần kiểm tra các giá trị bị cấm trong 'this.value' bằng cách sử dụng cụm từ thông dụng. Bạn đang thử nghiệm đối sánh chính xác với toàn bộ 'this.value' – user113716

+0

Thực ra, nếu câu lệnh' if() 'đã trả về' true', 'replace()' sẽ không kích hoạt. Vì bạn đang thử nghiệm với 'this.value', đó là một phần quan trọng. – user113716

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