una teclado tecla simular retroceso pulsacion presionar eventos evento ejemplos javascript safari

javascript - teclado - keyup jquery ejemplos



¿Cómo puedo generar un evento de pulsación de tecla en Safari con Javascript? (4)

¿Cómo puedo generar eventos de keypress desde el código JavaScript que se ejecuta en Safari mediante programación? Parece que WebKit está utilizando el modelo DOM nivel 3 para crear eventos de teclado desde Javascript, y el modelo de evento de teclado DOM nivel 3 no admite el evento de pulsación de tecla. ¿Hay alguna otra manera que pueda usar?

Estoy buscando una solución de DOM de Safari / WebKit tan pura como sea posible. Preferiría no modificar la página web, y preferiría no agregar dependencias en las bibliotecas externas. Necesito activar cualquier controlador de pulsación de tecla existente, por lo que no funcionará agregar un nuevo controlador y llamarlo directamente.

Parece que WebKit tiene las propiedades keyCode y charCode del evento keypress definido en su clase UIEvent, pero son de solo lectura. ¿Hay alguna manera de establecer esas propiedades? Lo siguiente no funciona:

var evt = document.createEvent(''UIEvents''); evt.initUIEvent(''keypress'', true, true, window, 0); evt.keyCode = 114; // ''r'' evt.charCode = 114; alert("keyCode = " + evt.keyCode + ", charCode = " + evt.charCode); // both 0

Establecer la propiedad de detalle en la llamada a initUIEvent también parece no tener ningún efecto.


http://docs.jquery.com/Events/keypress#fn

En otras palabras, adjuntas un evento de pulsación de tecla a algún elemento. Usando un elemento con la ID de "someid", por ejemplo:

<script language="text/javascript" src="jquery.js"></script> <script language="text/javascript"> $(function() { // add a keypress handler $("#someid").keypress(function(e){ alert(''you just pressed '' + e.which); }); // imitate the keypress $("#someid").keypress(); }); </script>


Use el TextEvent (introducido por DOM3). Como busca generar eventos de pulsación de teclas, supongo que está trabajando con caracteres. En el siguiente código, textToInsert es una cadena y textarea el elemento al que estoy enviando el evento.

var eventObject = document.createEvent(''TextEvent''); eventObject.initTextEvent(''textInput'', true, true, null, textToInsert); textarea.dispatchEvent(eventObject);

Esto funciona en Safari 3.1.2 (en consecuencia, en Chrome).


He tenido el mismo problema. Quería poder escribir una prueba que, cuando se pulsa la tecla Intro en la GUI, se agrega una línea de pedido (li) a una lista. Para entonces, necesitaba "generar" una pulsación de tecla. Después de haber tratado de generar el evento, simular un evento, simular el evento (jqMock), aquí hay una solución muy simple.

Puedo continuar con BDDing mi código usando código jsSpec y jQuery. Esta prueba sería un poco más difícil si utilizó un complemento para administrar las pulsaciones de teclas (por ejemplo, el complemento jQuery de teclas rápidas)

Esto es lo que quiero hacer:

describe ''I need to be able to edit items in a list'', {

... [setup code and other tests]

''should create a new item if I press enter'': function(){ value_of($(''#todo'').items().size()).should_be(7) // be on the last item in the list task = $(''#todo'').items().filter('':last'').focus() // press enter task.__keypress(13) // check that an item was added value_of($(''#todo'').tasks().size()).should_be(8) }, }

Aquí está el código que vincula al controlador. Tenga en cuenta que con esta solución, intercepto el evento y solo paso el código que me permite pasar el valor de la prueba. Eso es todo lo que necesito en este momento. Obviamente, si quisiera interceptar más, necesitaría expandir lo que se pasa (por ejemplo, consulte el plugin jquery.hotkeys):

$().items().bind(''keypress'', function(event){$().__keypress(event.which)})

Y aquí está el controlador:

__keypress: function(which){ switch(which) { ... case 13: // enter [my code that creates a new item] break; default: } },

ps: si alguien puede burlarse de window.event, hágamelo saber. No tuve suerte usando jqMock.