propiedades parametro inputevent evt event internet-explorer javascript-events

internet explorer - parametro - Miembro no encontrado Error de IE(IE 6, 7, 8, 9)



parametro event (2)

Permítanme señalar a los usuarios de IE en este momento (esto no es un problema en Chrome, Safari o Firefox) sugerencia indirecta;)

Entonces ... tengo un problema con mis tooltips en IE, tengo un onmouseover listener para todos los elementos que pueden ser recuperados y luego en mi función mouseover tengo una declaración cruzada de navegador muy básica como tal ...

var event = e || window.event, el = event.target || event.srcElement;

He estado teniendo problemas con el objeto ventana que no existe en IE o algo así, esto ha sido un problema después de que agregué un indicador para ignorar mouseover de un elemento mouseover en el camino a la información sobre herramientas (durante el ciclo de tiempo permitido, 300ms) . En otras palabras, la bandera es para ignorar mouseover en ruta a la información sobre herramientas del mouseover original.

Para que la lógica se vea así ...

loadtip.refMouseOver = function (e) { var event = e || window.event, el = event.target || event.srcElement; //console.log(window); // <-- throws error in IE (Member not found) // Reset the lastHoveredRef data. tipManager.lastHoveredRef = null; tipManager.lastHoveredRef = [el, event]; // true means there is a tip open still, so if no tip is open. if (tipManager.tipState !== true) { tipManager.processTip(el, event); } else { return; // do nothing } }

El error "Miembro no encontrado" se producirá cuando pase de un elemento rápidamente al siguiente en IE con la información sobre herramientas aún abierta.

Leí sobre window.abierto y cerré cosas con un try catch pero no vi cómo eso fue relavent. Cualquier ayuda es muy apreciada.

Gracias


Me doy cuenta de que esta pregunta / respuesta es bastante antigua y parece estar resuelta. Dicho esto, tengo otra alternativa que he utilizado para manejar un problema similar, aunque ligeramente diferente, con ''Miembro no encontrado'' en las versiones de IE anteriores a MSIE 9. ¡Espero que esto ayude a alguien! ... esto también se puede usar para solucionar problemas con Firefox que no tiene window.event .

Primero extendí jQuery y agregué una función para obtener la versión de MSIE o -1 si el navegador no es MSIE. Puede hacer lo mismo o simplemente crear una función JS pura para lograr esto. Luego, cree una función de anulación de eventos (puede ser necesario agregar una variable global de ''eventos'' en algunos casos), eso es más por cada situación individual. A continuación, anule el evento en su controlador de eventos según sea necesario.

Extendiendo jQuery

// So this will give you the version of IE (or for non IE browser -1) $.fn.msieVersion = function() { if ( navigator.userAgent.toLowerCase().indexOf( ''msie'' ) !== -1 ) { return document.documentMode; } return -1; };

Anular el evento global

var setEvent = function( evt ) { // Set the event if MSIE version is >= 9 or is -1 which means it''s not IE if ( $.fn.msieVersion() >= 9 || $.fn.msieVersion === -1 ) { // NOTE: I have a global ''event'' variable I''m using that comes from another previously loaded JS file // Why? I didn''t do it. I''m updating some SUPER old code the best I can. (old enough it has references to Netscape....) event = evt || window.event; } return true; };

Ejemplo de uso

$( ''img.myImageID'' ).bind(''mouseover mouseout'', function ( evt ) { setEvent( evt ); // Override the event // DO WORK! ...continue all other awesomeness here! // Maybe setTimeout(...) };


Ok, he encontrado el problema.

Para resumir, básicamente IE no pasará un evento a otra función si esa llamada de función está dentro de un setTimeout.

Entonces puedes engañar a IE creando una copia del evento y pasándolo, aquí hay un ejemplo de eso ...

var eventCopy = {}; for (var i in event) { eventCopy[i] = event[i]; }

Luego solo envíe su función a eventCopy, aunque este sea un truco ''total''.

setTimeout(function () { yourFunction(eventCopy), yourDelayTime);

Y voila funcionará.

Debo agregar, que Internet Explorer simplemente creará una referencia al evento de ventana global y es por eso que necesitamos la copia del evento. Esto se debe a que cuando SetTimeout llama a la función, windows.event ya pasó,

En pocas palabras ... no intente enviar un evento dentro de un setTimeout porque IE no lo aceptará. Esto es cierto para IE 6, 7 y 8 de mi prueba.