Tôi muốn trình duyệt hoạt động như thể người dùng đã nhấn phím Tab khi họ nhấp vào một cái gì đó. Trong xử lý nhấp chuột Tôi đã thử các phương pháp sau đây:Mô phỏng nhấn phím bằng cách sử dụng JavaScript
var event = document.createEvent('KeyboardEvent');
event.initKeyEvent("keypress", true, true, null, false, false, false, false, 9, 0);
this.input.focus()[0].dispatchEvent(event);
Và jQuery:
this.input.focus().trigger({ type : 'keypress', which : 9 });
... mà tôi mất từ here.
Cách tiếp cận đầu tiên có vẻ là đặt cược tốt nhất, nhưng không hoàn toàn hiệu quả. Nếu tôi thay đổi hai tham số cuối cùng thành 98, 98, thực sự, một 'b' được nhập vào hộp nhập liệu. Nhưng 9, 0 và 9, 9 (cựu trong đó tôi mất ngay từ trang web MDC) đều cung cấp cho tôi những sai sót trong firebug dưới FF3:
Permission denied to get property XULElement.popupOpen
[Break on this error] this.input.focus()[0].dispatchEvent(event);
Permission denied to get property XULElement.overrideValue
[Break on this error] this.input.focus()[0].dispatchEvent(event);
Permission denied to get property XULElement.selectedIndex
[Break on this error] this.input.focus()[0].dispatchEvent(event);
Permission denied to set property XULElement.selectedIndex
[Break on this error] this.input.focus()[0].dispatchEvent(event);
Tôi đã nghe như vậy (không có định nghĩa rõ ràng về các sự kiện 'như vậy' là 'không đáng tin cậy', điều này có thể giải thích những lỗi này.
Cách tiếp cận thứ hai gây ra bất kỳ giá trị nào tôi đặt dưới dạng sự kiện.được chuyển thành sự kiện. Nhưng không có hiệu lực (ngay cả khi tôi sử dụng 98 thay vì 9, không có 'b' được nhập vào hộp.) Tôi cố gắng thiết lập event.data trong đối tượng tôi đang đi qua, nó kết thúc không xác định khi sự kiện được kích hoạt. Nội dung sau là mã tôi đang sử dụng để xem:
$('#hi').keypress(function(e) {
console.log(e);
});
Có ý tưởng nào khác không?
Ông muốn gì để gọi? Bạn đang cố gắng chuyển chúng sang đầu vào tiếp theo? – hunter
Có. Nhưng "đầu vào" tiếp theo không nhất thiết là đầu vào hoặc yếu tố tự nhiên khác. Cũng không nhất thiết phải là tabstopped không tự nhiên (tức là, $ ("[tabindex]")). Tab nhấn vật lý (hoặc phím shift +) thực hiện chính xác những gì tôi muốn ... – Kev
Cảm ơn vì điều này. Tôi chỉ quan tâm đến ví dụ mã đầu tiên của câu hỏi của bạn, điều này thực sự đã giúp :) –