2015-08-10 15 views
19

Tôi muốn phát hiện Điều khiển + A sự kiện trong đầu vào. Tôi có thể tìm thấy điều khiển + A sự kiện, nhưng chức năng vẫn tiếp tục sau return false.Phát hiện Ctrl + A trong sự kiện keyup

jsFiddle - http://jsfiddle.net/f6rcgpmh/4/

$('.searchTerm').keyup(function(e) { 
 

 
    $("#status").text(""); 
 

 
    if (e.ctrlKey) { 
 
     if (e.keyCode == 65 || e.keyCode == 97) { // 'A' or 'a' 
 
      console.log("Control pressed"); 
 
      e.preventDefault(); 
 
      return false; 
 
     } 
 
    } 
 
    $("#status").text("This should not work if Ctrl + A is pressed"); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<form id="search" class="search"> 
 
    <input class="searchTerm" placeholder="Filter Books..."> 
 
    <input class="searchButton" type="submit"> 
 
</form> 
 
<div id="status"></div>

Tôi muốn điều này để làm việc trong keyup không keydown. Vì tôi đang sử dụng tính năng tự động tìm kiếm và tôi không muốn gọi hàm trước khi keyrelease. Và cũng có thể Ctrl + A sẽ không đánh dấu văn bản khi nhấn phím khi trả về sai.

+0

Điều gì hiện kiểm soát + a làm trong trình duyệt của bạn? –

+0

nó in văn bản ... nó không phá vỡ từ chức năng – Vishnu

+0

'keydown' gây nên trước' keyup' phải không? –

Trả lời

13

Thực ra chức năng dừng. Những gì bạn đang gặp phải là hai sự kiện khởi động kích hoạt: một sự kiện từ ctrl và số từ A.

Phương thức đầu tiên trả về như mong đợi vì nó đáp ứng các yêu cầu: ctrlKey == truekeyCode == 65 || keyCode == 97.

Nhưng điều thứ hai, sẽ có chỉ có một chìa khóa ép vì vậy cả hai tuyên bố không thể đúng với nhau:

  • Nếu bạn cuối cùng phát hành ctrl, sau đó ctrlKey là đúng nhưng không phải là keyCode == 65 || keyCode == 97 .

  • Nếu bạn vừa phát hành A, thì ctrlKey giờ đây là sai.

Sau đó, dòng đặt #status thành thông báo lỗi sẽ chạy.

+3

Đây là câu trả lời đúng. Tôi đã viết như vậy, nhưng Kaiido nhanh hơn. – nalply

+1

cách khắc phục là sử dụng cờ: http://jsfiddle.net/f6rcgpmh/12/ – Kaiido

4

Thực ra là không. Bạn phải thay đổi sự kiện của mình từ 'keyup' thành 'keydown'. Sau đó thử lại lần nữa. Bạn có thể kiểm tra fiddle này. http://jsfiddle.net/ebilgin/f6rcgpmh/5/


Nếu bạn cần kiểm soát tự động hoàn tất, bạn phải đặt điều khiển trước khi gửi dữ liệu.

Trình kích hoạt sự kiện nhấn phím Ctrl gây ra sự cố của bạn. Tôi đã thêm một điều kiện khác vào mã của bạn,

if (e.keyCode == 17) // Ctrl key, fires at Ctrl's keyup. 
    return false; 

Bạn có thể kiểm tra fiddle mới, http://jsfiddle.net/ebilgin/f6rcgpmh/10/.

+0

Tôi biết nó hoạt động trong keydown .. Tôi cần nó cho keyup..Reason là tôi đang sử dụng autosearch trong textbox và tôi muốn tìm kiếm chỉ sau khi keyup. – Vishnu

+0

Nếu bạn chuẩn bị fiddle như những gì bạn có, tôi có thể giúp đỡ nhiều hơn nữa. – ebilgin

+0

Kiểm tra nó http://jsfiddle.net/f6rcgpmh/7/ .type bất kỳ 1 bảng chữ cái nào. – Vishnu

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