2010-07-30 40 views
132

¿Cuál es la mejor manera de simular que un usuario ingrese texto en un cuadro de entrada de texto en JS y/o jQuery?¿Desencadenar un evento de pulsación de tecla/teclado/tecla en JS/jQuery?

Me puse quieren poner realmente el texto en el cuadro de entrada, sólo quiero a desencadenar todo caso manipuladores que normalmente se disparará por un usuario escribir información en un cuadro de entrada. Esto significa foco, keydown, keypress, keyup y blur. Creo.

Entonces, ¿cómo se lograría esto?

Respuesta

202

puede activar cualquiera de los eventos con una llamada directa a ellos, así:

$(function() { 
    $('item').keydown(); 
    $('item').keypress(); 
    $('item').keyup(); 
    $('item').blur(); 
}); 

hace eso lo que estás tratando de hacer?

Debería probablemente desencadenar .focus() y potencialmente .change()

Si desea activar las claves eventos con teclas específicas, puede hacerlo de esta manera:

$(function() { 
    var e = $.Event('keypress'); 
    e.which = 65; // Character 'A' 
    $('item').trigger(e); 
}); 

Hay una cierta discusión interesante de los eventos de pulsación de tecla aquí: jQuery Event Keypress: Which key was pressed?, específicamente con respecto a la compatibilidad de varios navegadores con la propiedad .which.

+0

Sólo por curiosidad - el que p arte ¿Echas de menos? ¿Desea activar los eventos o modificar los eventos antes de activarlos? – ebynum

+0

Modificándolos. No sabía que era posible con JQ – Alex

+8

¿Alguien sabe cómo hacer esto sin jquery (o con dojo)? – streetlight

25

Para activar ingrese presionando la tecla, tuve que modificar la respuesta @ebynum, específicamente, usando la propiedad keyCode.

e = $.Event('keyup'); 
e.keyCode= 13; // enter 
$('input').trigger(e); 
+2

El evento 'keydown' no está siendo capturado, ¿o estoy haciendo algo mal aquí? fiddle.jshell.net/Palestinian/8d8J9 – Omar

+0

@Omar: la razón por la que no funcionaba ya que vinculaba el evento después de plantear el evento. solo une el evento antes de activar el evento. mira esto: http://fiddle.jshell.net/8d8J9/13/ –

+0

@cloak: funciona. Revise mi comentario aquí para obtener un selector completo para reparar los controles de asp.net: http://www.codeproject.com/Tips/269388/How-prevent-Textbox-postback-when-hit-enter-key-in?msg=5145046 # xx5145046xx Asegúrate de llamar después de insertar algo en el dom si se usa Ajax. –

9

Ahora usted es capaz de hacer:

var e = $.Event("keydown", {keyCode: 64}); 
13

Aquí es ejemplo de una vainilla js para desencadenar todo caso: eventos

function triggerEvent(el, type){ 
if ('createEvent' in document) { 
     // modern browsers, IE9+ 
     var e = document.createEvent('HTMLEvents'); 
     e.initEvent(type, false, true); 
     el.dispatchEvent(e); 
    } else { 
     // IE 8 
     var e = document.createEventObject(); 
     e.eventType = type; 
     el.fireEvent('on'+e.eventType, e); 
    } 
} 
+4

¿Puede proporcionar algunos ejemplos de uso? ¿Cómo se usaría su función para enviar un código clave? – Mac

+1

Has asumido que las personas sabrán qué son 'el' y 'tipo'. – Bwyss

+2

El código fuente para esta publicación se puede encontrar en el siguiente enlace que incluye documentación: https://plainjs.com/javascript/events/trigger-an-event-11/ –

8

Se podría despachar como

el.dispatchEvent(new Event('focus')); 
el.dispatchEvent(new KeyboardEvent('keypress',{'key':'a'})); 
0

Antes que nada, necesito decir esa muestra de Sionnach733 funcionó a la perfección. Algunos usuarios se quejan de la ausencia de ejemplos reales. Aquí están mis dos centavos. He estado trabajando en la simulación de clics del mouse al usar este sitio: https://www.youtube.com/tv. Puedes abrir cualquier video e intentar ejecutar este código. Realiza el cambio al siguiente video.

function triggerEvent(el, type, keyCode) { 
    if ('createEvent' in document) { 
      // modern browsers, IE9+ 
      var e = document.createEvent('HTMLEvents'); 
      e.keyCode = keyCode; 
      e.initEvent(type, false, true); 
      el.dispatchEvent(e); 
    } else { 
     // IE 8 
     var e = document.createEventObject(); 
     e.keyCode = keyCode; 
     e.eventType = type; 
     el.fireEvent('on'+e.eventType, e); 
    } 
} 

var nextButton = document.getElementsByClassName('icon-player-next')[0]; 
triggerEvent(nextButton, 'keyup', 13); // simulate mouse/enter key press 
-1

Usted puede lograr esto con: EventTarget.dispatchEvent(event) y al pasar en una nueva KeyboardEvent como el evento.

Por ejemplo: element.dispatchEvent(new KeyboardEvent('keypress', {'key': 'a'}))

Ejemplo de trabajo:

// get the element in question 
 
const input = document.getElementsByTagName("input")[0]; 
 

 
// focus on the input element 
 
input.focus(); 
 

 
// add event listeners to the input element 
 
input.addEventListener('keypress', (event) => { 
 
    console.log("You have pressed key: ", event.key); 
 
}); 
 

 
input.addEventListener('keydown', (event) => { 
 
    console.log(`key: ${event.key} has been pressed down`); 
 
}); 
 

 
input.addEventListener('keyup', (event) => { 
 
    console.log(`key: ${event.key} has been released`); 
 
}); 
 

 
// dispatch keyboard events 
 
input.dispatchEvent(new KeyboardEvent('keypress', {'key':'h'})); 
 
input.dispatchEvent(new KeyboardEvent('keydown', {'key':'e'})); 
 
input.dispatchEvent(new KeyboardEvent('keyup', {'key':'y'}));
<input type="text" placeholder="foo" />

MDN dispatchEvent

MDN KeyboardEvent

+1

El autor no quiere saber cómo escuchar eventos . – C0ZEN

+0

Mis disculpas, parece que he leído mal la pregunta. He editado mi respuesta para reflejar mejor la pregunta en cuestión –

Cuestiones relacionadas