2013-03-25 4 views
0

У меня есть div, который работает как кнопка. Как только кнопка нажата, я хочу, чтобы она смоделировала нажатие клавиши. В другом месте Stackoverflow люди предложили использовать jQuery.Event("keydown");, но в предложениях все используют .trigger(), привязанные к кнопке, а не .click. Итак, мой пример кода выглядит следующим образом:Виртуальная клавиатура с JQuery

var press = jQuery.Event("keydown"); 
press.which = 69; // # The 'e' key code value 
press.keyCode = 69; 

$('#btn').click(function() { 
    $('#testInput').focus(); 
    $(this).trigger(press); 
    console.info(press); 
}); 

Я создал фиктивный пример в JSFiddle: http://jsfiddle.net/ruzel/WsAbS/

В конце концов, а не иметь заполнить нажатие элемента формы, я просто хочу зарегистрируйте событие как ключевое слово для документа, чтобы игра MelonJS могла иметь его.

UPDATE: По соображениям безопасности запуск браузера с помощью чего-либо, кроме клавиатуры, может быть проигнорирован браузером. Для обновления ввода текста, это очень хороший Jquery плагин будет делать трюк: http://bililite.com/blog/2011/01/23/improved-sendkeys/

Как для тех, кто приходит сюда в поисках решения в случае MelonJS, то лучше использовать объект me.input MelonJS, как и так:

$('#btn').mousedown(function() { 
    me.input.triggerKeyEvent(me.input.KEY.E, true); 
}); 

$('#btn').mouseup(function() { 
    me.input.triggerKeyEvent(me.input.KEY.E, false); 
}); 
+0

Так в чем ваш вопрос? Если вы хотите вызвать его на 'document', просто используйте это вместо' this'. '$ (document) .trigger (нажать);' – Ian

+0

Я не уверен, что вам нужно для MelonJS, но я думаю, что вы ищете '$ ('# testInput'). trigger (press);' вместо ' $ (это) .trigger (пресса); '. На самом деле это не будет вставлять текст в текстовое поле, но он будет имитировать код 69, который будет нажат в этом текстовом поле. И он автоматически перейдет в «документ» (характер '.trigger') - http://jsfiddle.net/WsAbS/5/ – Ian

+0

Спасибо, Ян. Да, как я уже сказал в моем обновлении выше, похоже, что вы не можете отправить нажатие на ввод, который не исходит из фактических причин безопасности клавиатуры. Что касается MelonJS, я обратился к этому в обновлении выше. – russellmania

ответ

1

Я не уверен, почему, но хотя этот запускает событие правильно, он не заполняет ввод символом.

Я изменил код, чтобы показать, что документ действительно получать события нажатия клавиш, когда мы говорим $(document).trigger(p)

Попробуйте: http://jsfiddle.net/WsAbS/3/

var press = jQuery.Event("keydown"); 
press.which = 69; // # Some key code value 
press.keyCode = 69; 
press.target = $('#testInput'); 


$(document).on('keydown', function(event) { 
    alert(event.keyCode); 
}); 

$('#btn').click(function() { 
    $(document).trigger(press); 
}); 

Я считаю, что это должно быть достаточно для вашего конечная цель игры MelonJS, набирающей клавиши.

+0

Но это не нужно. Запуск события на '$ (this)' (или что-нибудь в 'document') заставляет событие пузыриться до' document', и оно будет поймано им в любом случае. – Ian

+0

ОК, но я хотел бы создать простое доказательство того, что это вызывает событие keydown. Если мы действительно собираемся попасть в '' '' '' '' '' '' '' ', почему бы просто не сказать' document' в первую очередь, если это то, где мы хотим, чтобы он пузырился? Это яснее, и это экономит время компьютера. – danmcardle

+0

То, что вы сказали, правда, но оно не моделирует событие keydown для текстового поля. В вашем примере это не пузырится по цепочке DOM, как обычное событие keydown (например, физическое нажатие клавиши на клавиатуре). Откуда вы знаете, что нет других элементов, слушающих это событие, которые требуют, чтобы у него было правильное происхождение?Я думаю, что OP в любом случае вызывал его на неправильном элементе - 'this' относится к псевдо-кнопке, но они должны запускать его на элементе' input'. Похоже, что точность важнее, чем «экономия времени компьютера», но опять же я не знаю, что нужно MelonJS. – Ian

1

Если вы хотите виртуальную клавиатуру (как следует из названия), вы можете использовать this.

+0

Не совсем то, что я искал, но прислуга для ссылки. Я уверен, что это будет полезно в будущем. – russellmania

Смежные вопросы