2009-09-23 34 views
68

Sử dụng jQuery, làm thế nào tôi có thể mô phỏng (kích hoạt?) Mộ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:Mô phỏng bấm phím với jQuery

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

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

Something như thế này, tôi giả:

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

Bất kỳ ý tưởng về làm thế nào để đạt được điều này?

+0

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

+1

[This] (http://stackoverflow.com/questions/596481/simulate-javascript-key-events) có thể trả lời câu hỏi của bạn. – themis

Trả lời

11

Sự kiện nhấn phím từ jQuery có nghĩa là 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 "nhấn phím" tới .trigger(). Tuy nhiên để cụ thể hơn, bạn thực sự có thể vượt qua một đối tượng jQuery.Event (chỉ định kiểu là "nhấn phím") và cung cấp bất kỳ thuộc tính nào bạn muốn như mã phím 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.

+44

Chắc chắn, đọc tài liệu, nhưng áp phích có thể đã biết điều đó. Tài liệu về sự kiện jQuery là một chút mờ đục.Andrew Culver đã đưa ra một câu trả lời trực tiếp, cộng với một tài liệu tham khảo để biết thêm thông tin. –

10

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

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

$(element).sendkeys(string) chèn chuỗi tại điểm chèn trong một đầu vào, textarea hoặc thành phần khác với contenteditable = true. Nếu điểm chèn hiện không ở trong phần tử, nó sẽ ghi nhớ nơi điểm chèn là khi lần gửi cuối cùng được gọi (nếu điểm chèn không bao giờ ở phần tử, nó sẽ kết thúc).

+0

Điều này làm việc hoàn hảo cho tôi Cảm ơn! – Jmlevick

+0

Bạn không cần jQuery để sử dụng điều này, bạn có thể sử dụng chức năng tương tự bằng cách chỉ nhận thư viện 'bililiteRange': https://github.com/dwachss/bililiteRange (trên thực tế, plugin jQuery chỉ là một trình bao bọc mỏng xung quanh thư viện đáng kinh ngạc này tự đứng vững). – fiatjaf

124

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ừ here.

+12

Đ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. –

+4

@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ư phím được chỉ định, nhưng không thực sự nhấn phím như khi phím được nhấn trên bàn phím (có thể do lý do bảo mật) – BornToCode

+3

Có lý do nào khiến bạn xen kẽ '$' và 'jQuery' không? –

4

này hoạt động:

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 ('nhấn phím'); event.which = 13; event.keyCode = 13; jQuery (this) .trigger (event);] thử này – anu

+0

Tôi cần nhấp vào Enter trong hộp thoại, vì vậy với đoạn mã ở đây, tôi đã thay thế * this * bằng * # myEl * .. thanks – gnB

+0

điều này không làm việc cho tôi –

27

Một tùy chọn khác:

$(el).trigger({type: 'keypress', which: 13, keyCode: 13}); 

http://api.jquery.com/trigger/

+1

Tôi không chắc chắn 'which' là gì. Chỉ có' ​​keyCode' hoạt động cho tôi trong SAPUI5 (jQuery 2.2.3 trên Chrome) –

-1

Nếu bạn muốn để mô phỏng hoạt động của trình duyệt như "undo" hoặc "làm lại", bạn nên cố gắng này:

function doUndo(){ 
    document.execCommand('undo', false, null); 
} 

function doRedo(){ 
    document.execCommand('redo', false, null); 
} 
+0

câu trả lời này không liên quan gì đến Câu hỏi – slfan

+0

Điều này liên quan đến câu hỏi như thế nào? –

+0

Bằng cách này bạn cũng có thể mô phỏng các nhấp chuột của sự kiện trình duyệt – parismiguel

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