Mô phỏng thao tác nhấn phím với jQuery


79

Sử dụng jQuery, làm cách nào để mô phỏng (kích hoạt?) KeyPress khi một liên kết được nhấp? Ví dụ: khi người dùng nhấp vào liên kết sau:

<a id="clickforspace" href="#">Click Here</a>

Sau đó, bằng cách nhấp vào liên kết, nó sẽ giống như thể họ nhấn "phím cách" trên bàn phím của họ.

Một cái gì đó như thế này, tôi giả định:

$("#clickforspace").click(function(e) { 
    e.preventDefault(); 
    //... Some type of code here to initiate "spacebar" //
                                      });

Bất kỳ ý tưởng về cách đạt được điều này?


2
Điều này có thể trả lời câu hỏi của bạn.
themis 23/09/09

Tôi tò mò - khi cố gắng thay thế clickbằng phím cách, bạn có thực sự muốn trình duyệt cuộn xuống trang không? Nhấn phím cách trên một liên kết thường có tác dụng tương tự như nhấn phím xuống trang.
Joel Purra

Câu trả lời:


15

Sự kiện nhấn phím từ jQuery nhằm thực hiện loại công việc này. Bạn có thể kích hoạt sự kiện bằng cách chuyển một chuỗi "phím bấm" tới .trigger (). Tuy nhiên, để cụ thể hơn, bạn thực sự có thể truyền một đối tượng jQuery.Event (chỉ định kiểu là "keypress") và cung cấp bất kỳ thuộc tính nào bạn muốn, chẳng hạn như mã khóa là phím cách.

http://docs.jquery.com/Events/trigger#eventdata

Đọc tài liệu trên để biết thêm chi tiết.


53
Chắc chắn, hãy đọc tài liệu, nhưng người đăng có thể đã biết điều đó. Tài liệu về các sự kiện jQuery hơi mờ. Andrew Culver đã đưa ra câu trả lời trực tiếp, cùng với tài liệu tham khảo để biết thêm thông tin.
Roy Leban

142

Tôi tin rằng đây là những gì bạn đang tìm kiếm:

var press = jQuery.Event("keypress");
press.ctrlKey = false;
press.which = 40;
$("whatever").trigger(press);

Từ đây .


17
Điều này sẽ không tạo ra bất kỳ văn bản thực tế nào nếu được sử dụng với điều khiển đầu vào chẳng hạn.
Alex Burtsev

5
@AlexBurtsev - Bạn nói đúng, đó là vì điều này chỉ kích hoạt trình xử lý sự kiện như thể phím cụ thể được nhấn, nhưng không thực sự nhấn phím đó giống như xảy ra khi nhấn một phím trên bàn phím (có thể là do lý do bảo mật)
BornToCode

6
Có lý do gì khiến bạn trộn '$' và 'jQuery' không?
Danny Andrews

4
Những gì bạn đã viết không phù hợp với tôi trong jQuery 2.2.3 trên Chrome. :( Nhưng điều này đã xảy ra:$("whatever").trigger($.Event("keydown", {keyCode: 40}))
Jonathan Benn

1
Dựa trên phương pháp của Jonathan Benn, bạn cũng có thể sử dụng kỹ thuật tương tự để gửi khóa thay vì gửi mã khóa (vì mã khóa được đánh dấu là không dùng nữa). Ví dụ: $ ("bất cứ điều gì"). Trigger ($. Event ("keyup", {key: "Enter"})) - và tùy chọn, như được hiển thị, với các sự kiện bàn phím khác nhau.
Alan M.


12

Bạn có thể thử plugin SendKeys jQuery này:

http://bililite.com/blog/2011/01/23/improved-sendkeys/

$(element).sendkeys(string)chèn chuỗi tại điểm chèn trong đầu vào, vùng văn bản hoặc phần tử khác với contenteditable = true. Nếu điểm chèn hiện không có trong phần tử, nó sẽ nhớ vị trí của điểm chèn khi các sendkey được gọi lần cuối (nếu điểm chèn chưa bao giờ nằm ​​trong phần tử, nó sẽ nối vào cuối).


Bạn không cần jQuery để sử dụng cái này, bạn có thể sử dụng chức năng tương tự bằng cách tải bililiteRangethư viện: github.com/dwachss/bililiteRange (trên thực tế, plugin jQuery chỉ là một lớp bọc mỏng xung quanh thư viện đáng kinh ngạc này tự đứng riêng ).
fiatjaf

5

Những công việc này:

var event = jQuery.Event('keypress');
event.which = 13; 
event.keyCode = 13; //keycode to trigger this for simulating enter
jQuery(this).trigger(event); 

1
[var event = jQuery.Event ('keypress'); event.which = 13; event.keyCode = 13; jQuery (this) .trigger (sự kiện);] thử này
Anoop PS

Tôi cần phải nhấn Enter trong một hộp thoại, như vậy với đoạn mã ở đây, tôi thay thế này với #myEl .. cảm ơn
Gene Bo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.