2011-03-18 17 views
13

Básicamente estoy tratando de enviar un evento de clic de ratón por encargo a un elemento de entrada de texto usando el siguiente código (ver este jsFiddle):¿Es posible enviar aEvent() un clic del mouse a un elemento <input type = text>?

function simulateClick(id) { 
    var clickEvent = document.createEvent("MouseEvents"); 
    clickEvent.initMouseEvent("click", true, true, window, 1, 0, 0, 0, 0, 
     false, false, false, false, 0, null); 

    var element = document.getElementById(id); 
    element.dispatchEvent(clickEvent); 
} 

Cuando corro ese código en un elemento de type="checkbox" funciona perfectamente bien pero no funciona en absoluto cuando se invoca un elemento type="text".

Ahora aquí es la definición de initMouseEvent() en MDN:

event.initMouseEvent(type, canBubble, cancelable, view, 
       detail, screenX, screenY, clientX, clientY, 
       ctrlKey, altKey, shiftKey, metaKey, 
       button, relatedTarget); 

Así en el ejemplo anterior screenX, screenY, clientX y clientY serían todas 0 (aún así, el código anterior funciona perfectamente bien con casillas de verificación independientemente de su posición). Traté de capturar un evento real y pasar las coordenadas de la pantalla y del cliente al evento cusom made, sin éxito.

Pensé que los elementos de entrada de texto pueden ignorar los eventos personalizados del mouse debido a razones de seguridad, pero element.focus() tampoco debería funcionar, lo que hace.

¡Cualquier idea o idea sería muy apreciada!

+0

si fuera tú me gustaría considerar el uso de jQuery library y luego el método 'trigger' - funciona muy bien con el navegador cruzado, y hará que su vida sea mucho más fácil :) –

+0

¿Cómo está usted determinando que el clic no funciona? Cuando agrego un controlador 'onclick' a su ejemplo, se activa: http://jsfiddle.net/epevj/11/ ¿Espera obtener el foco? Entonces, ¿por qué no estás usando 'focus()'? – RoToRa

Respuesta

5

Por lo que puedo decir, su código funciona bien. Sin embargo, no enfoca el campo de entrada como puede pensar, pero el evento se dispara en el campo de entrada, como se ve en este violín: http://jsfiddle.net/ENvZY/

Nota: el código no es compatible con crossbrowser, pero falla en ie8 .

considere el uso de una buena biblioteca como jQuery crossbrowser en vez de seguir el camino DOM nativa - existe la rueda y funciona perfectamente, reinventando es una pérdida de tiempo :)

+0

De hecho, se llaman los manejadores de clic del mouse, aunque el campo de entrada no adquiere automáticamente el foco, como supuse incorrectamente y usted señaló :) Sé acerca de jQuery, esto fue solo un código de prueba de concepto. ¡Gracias! –

Cuestiones relacionadas