Ответ 1
Я поражен тем, что эта ошибка сидит там целую вечность. Кажется, что обходной путь использует общие события. Вот демо: http://jsbin.com/awenaq/3
Я пытаюсь установить keyCode на отправленный объект события.
При щелчке по кнопке в элементе управления текстовыми полями возникает событие для имитации события keydown. Событие успешно возбуждено, но keyCode равно 0. Мне нужно отправить объект события с правильным keyCode в текстовое поле. Я использовал код here.
Как установить значение keyCode в отправленном событии?
<html>
<head>
</head>
<body>
<input type="button" id="btn" value="Click"></input>
<input type="text" id="txt"></input>
<script>
document.getElementById('btn').addEventListener("click", btnClick);
document.getElementById('txt').addEventListener("keydown", txtKeydown);
function btnClick(e) {
var txt = document.getElementById('txt');
var dispatchKeyboardEvent = function(target, initKeyboradEvent_args) {
var e = document.createEvent("KeyboardEvents");
e.initKeyboardEvent.apply(e, Array.prototype.slice.call(arguments, 1));
e.keyCode = 83;
e.charCode = 0;
target.dispatchEvent(e);
};
var canceled = !dispatchKeyboardEvent(txt,
'keydown', true, true, // type, bubbles, cancelable
window, // window
's', // key
0, // location: 0=standard, 1=left, 2=right, 3=numpad, 4=mobile, 5=joystick
false, false, false); // Ctr, Alt, Shift
}
function txtKeydown(e) {
console.dir(e);
console.log(e.keyCode);
}
</script>
</body>
</html>
Я поражен тем, что эта ошибка сидит там целую вечность. Кажется, что обходной путь использует общие события. Вот демо: http://jsbin.com/awenaq/3
Похоже, это было немного, потому что вы спросили об этом, чтобы вы, возможно, уже нашли ответ на свой вопрос. В случае, если вы этого не сделали, есть проблема ошибка в Webkit, как было указано в this SO вопрос, который вызывает keyCode всегда равным 0. Видимо, вы не можете сделать это, пока не исправите это. К сожалению, это не похоже, что кто-то действительно работает над этим, хотя. Это не тот ответ, который вы хотите услышать, но это единственный ответ, который каждый может вам дать прямо сейчас.
Я столкнулся с такой же проблемой с устройствами Android, такими как Sony Xperia и HTC Devices. Поэтому я нашел альтернативное решение: см. Мой ответ на этот вопрос KeyCode Возвращает 0 Всегда
Если у вас есть jQuery:
$.Event(event, { keyCode: 13 });
Это намеренное использование.
Источник.
Это происходит потому, что (как уже говорили другие) объект KeyboardEvent (который использует charCode вместо keyCode) вызывается вместо объекта Event. Когда вы используете:
function txtKeydown(e) {
console.dir(e);
console.log(e.keyCode);
}
если вы e.charCode
0
на консоль, попробуйте использовать e.charCode
вместо e.keyCode
обратитесь к веб-документам MDN для получения дополнительной информации о KeyboardEvent: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent
Это не ошибка... эта функция отсеивается, устарела, запрещена, whateva 'имя будет завтра... Вы не можете полагаться на эту функцию, чтобы работать долго.... и представляет собой широкий открытый риск для безопасности... найдите другой способ сделать то, что вы пытаетесь сделать. Обратитесь к спецификациям MOZILLA, и вы увидите BIG BAD RED BANNER, который предупреждает об этом, как чума. Они не будут исправлять это, возвращая 0, они эффективно останавливают кровотечение, не меняя код, кроме как в одном месте, где он всегда закрывает keyCode до 0.