आप सही तरीके से यह कर चाहते हैं, आप कर सकते हैं DOM कीबोर्ड इवेंट लेवल 4 कीबोर्डइवेंट निर्माण और कुंजी संपत्ति का उपयोग करें।
नवीनतम ब्राउज़रों में या DOM Keyboard Event Level 3/4 polyfill साथ आप कर सकते हैं कुछ इस तरह:
element.addEventListener(function(e){ console.log(e.key, e.char, e.keyCode) })
var e = new KeyboardEvent("keydown", {bubbles : true, cancelable : true, key : "Q", char : "Q", shiftKey : true});
element.dispatchEvent(e);
//If you need legacy property "keyCode".
// Note: In some browsers you can't overwrite "keyCode" property. (At least in Safari)
delete e.keyCode;
Object.defineProperty(e, "keyCode", {"value" : 666})
Example
"map event.key to character values of a normal QUERTY (en-US) layout" proposal demo
ध्यान दें कि कीकोड और charCode नवीनतम युक्ति (www में पदावनत कर रहे हैं .w3.org/TR/डोम लेवल-3-घटनाक्रम /)। इसलिए initKeyEventकुंजीकोड समर्थन के साथ क्रोम को लागू करने का कोई मौका नहीं है। अद्यतन: लेकिन आप हमेशा यह मान ओवरराइड कर सकते हैं बुरा विधि:
var evt = document.createEvent('KeyboardEvent');
evt.initKeyEvent("keypress", false, true, null, false, false,
shift, false, keyCode(key), key.charCodeAt(0));
if(evt.keyCode != keyCode(key)) {
delete evt.keyCode;
// Note: In some browsers you can't overwrite "keyCode" property. (At least in Safari)
Object.defineProperty(evt, "keyCode", { keyCode(key) });
}
या आप कर सकते हैं अद्यतन घटना प्रोटोटाइप: अद्यतन: बुरा विधि:
// Note: In some browsers you can't overwrite "keyCode" property. (At least in Safari)
var _native_keyCode_getter = Object.getOwnPropertyDescriptor(KeyboardEvent.prototype, "keyCode");
Object.defineProperty(KeyboardEvent.prototype, "keyCode", {
"enumerable" : true,
"configurable" : true,
"get" : function() {
if("__keyCode" in this)return this["__keyCode"];
return _native_keyCode_getter.call(this);
},
"set" : function(newValue) {
return this["__keyCode"] = isNaN(newValue) ? 0 : newValue;
}
});
अद्यतन InitKeyboardEvent के विभिन्न कार्यान्वयन हैं।मेरी KeyboardEvent polyfill में मैं इसे इस (gist) की तरह किसी भी तरह का पता लगाने:
var _initKeyboardEvent_type = (function(e) {
try {
e.initKeyboardEvent(
"keyup" // in DOMString typeArg
, false // in boolean canBubbleArg
, false // in boolean cancelableArg
, global // in views::AbstractView viewArg
, "+" // [test]in DOMString keyIdentifierArg | webkit event.keyIdentifier | IE9 event.key
, 3 // [test]in unsigned long keyLocationArg | webkit event.keyIdentifier | IE9 event.location
, true // [test]in boolean ctrlKeyArg | webkit event.shiftKey | old webkit event.ctrlKey | IE9 event.modifiersList
, false // [test]shift | alt
, true // [test]shift | alt
, false // meta
, false // altGraphKey
);
return ((e["keyIdentifier"] || e["key"]) == "+" && (e["keyLocation"] || e["location"]) == 3) && (
e.ctrlKey ?
e.altKey ? // webkit
1
:
3
:
e.shiftKey ?
2 // webkit
:
4 // IE9
) || 9 // FireFox|w3c
;
}
catch (__e__) { alert("browser do not support KeyboardEvent") }
})(document.createEvent("KeyboardEvent"));
var e = document.createEvent("KeyboardEvent");
...
if("initKeyEvent" in e) {//FF
//https://developer.mozilla.org/en/DOM/event.initKeyEvent
e.initKeyEvent(type, _bubbles, _cancelable, _view, _ctrlKey, _altKey, _shiftKey, _metaKey, _keyCode, _keyCode);
}
else if("initKeyboardEvent" in e) {//https://developer.mozilla.org/en/DOM/KeyboardEvent#initKeyboardEvent()
if(_try_initKeyboardEvent) {
if(_initKeyboardEvent_type == 1) { // webkit
//http://stackoverflow.com/a/8490774/1437207
//https://bugs.webkit.org/show_bug.cgi?id=13368
e.initKeyboardEvent(type, _bubbles, _cancelable, _view, _key, _location, _ctrlKey, _shiftKey, _altKey, _metaKey, _altGraphKey);
}
else if(_initKeyboardEvent_type == 2) { // old webkit
//http://code.google.com/p/chromium/issues/detail?id=52408
e.initKeyboardEvent(type, _bubbles, _cancelable, _view, _ctrlKey, _altKey, _shiftKey, _metaKey, _keyCode, _keyCode);
}
else if(_initKeyboardEvent_type == 3) { // webkit
e.initKeyboardEvent(type, _bubbles, _cancelable, _view, _key, _location, _ctrlKey, _altKey, _shiftKey, _metaKey, _altGraphKey);
}
else if(_initKeyboardEvent_type == 4) { // IE9
//http://msdn.microsoft.com/en-us/library/ie/ff975297(v=vs.85).aspx
e.initKeyboardEvent(type, _bubbles, _cancelable, _view, _key, _location, _modifiersListArg, _repeat, _locale);
}
else { // FireFox|w3c
//http://www.w3.org/TR/DOM-Level-3-Events/#events-KeyboardEvent-initKeyboardEvent
//https://developer.mozilla.org/en/DOM/KeyboardEvent#initKeyboardEvent()
e.initKeyboardEvent(type, _bubbles, _cancelable, _view, _char, _key, _location, _modifiersListArg, _repeat, _locale);
}
}
}
मैं, प्रश्न से एक टिप्पणी हटा दिया और जवाब के रूप में डाल दिया है क्योंकि मुझे लगता है कि यहां तक कि यह वास्तव में सवाल का समाधान नहीं करता सोचा, यह एक ही समस्या होने के रूप में मैंने किया था लोगों के लिए बहुत उपयोगी हो सकता है। – fserb
अरे आपने समस्या को कैसे हल किया? मुझे क्रोम/सफारी पर बाएं और दाएं की कुंजी-प्रेस सिमुलेट करने का भी सामना करना पड़ रहा है। लेकिन कोई सफलता नहीं, आपने यह कैसे किया? – MaX
क्या आपने पोस्ट किए गए समाधान का प्रयास किया था? यह मेरे लिए काम करता है और शायद आपको अपना लक्ष्य प्राप्त करने में मदद करता है, इसलिए यह मेरे लिए अजीब बात है कि आपने अपना जवाब "यह एक बग" स्वीकार कर लिया है। – Dennis