2011-11-03 14 views
11

Estoy viendo el "SCRIPT3: miembro no encontrado". error en IE < 9. Mirando varias ubicaciones, (por ej., Member not found IE error (IE 6, 7, 8, 9)) parece ocurrir en el setTimeout dentro de la porción .hover().IE <9 mostrando "Miembro no encontrado"

Seguí los pasos en el pero sigo teniendo el mismo problema. Estaría agradecido por cualquier ayuda.

Probablemente también podría ocurrir en lugares dentro del change() fn.

He colocado el código completo en: http://jsfiddle.net/f4tZQ/

+0

se puede añadir su edición como una respuesta? –

+0

En el archivo jquery-1.6.2.js, línea 3172, comenté 'e.cancelBubble = true; 'e insertó ' if (typeof e.cancelBubble! == 'unknown') {e.cancelBubble = true; } ' En otras palabras, una ligera modificación del archivo jquery original. – maan81

+0

Lo siento. Quería agregar código: comentado - 'e.cancelBubble = true;' e insertado - 'if (typeof e.cancelBubble! == 'unknown') {e.cancelBubble = true; } ' – maan81

Respuesta

6

Después de buscar en algún momento, me parece ser afectada por jQuery fallo. Siguiendo el "comentario: 4", cambiando el archivo jQuery-1.6.2.js, la línea 3172 resolvió el problema.

if (typeof e.cancelBubble !== 'unknown') { e.cancelBubble = true; } 

no preguntes por qué, pero funcionó ... Por alguna razón vuelve 'desconocido' aquí en lugar de 'indefinido' jQuery o IE.

obtenerse en:

Fuente: http://bugs.jquery.com/ticket/10004

+0

Consulte mi pregunta para obtener más información sobre" desconocido "en IE: http://stackoverflow.com/questions/10982739/typeof-returning-unknown-in-ie –

+3

Editar JQuery es una mala idea. – Nicknameless

8

Para otros que reciben aquí que no quieren modificar la fuente de jQuery ... (POR EL AMOR DE DIOS NO HACER ESO)

Esto ocurre en ie < 9 cuando dispara eventos personalizados. Si tiene acceso al evento antes de que llegue al punto donde, por ejemplo, se bloquea, recorra la cadena original del evento y configure el último = {};

El código siguiente es para cuando confía jQuery para procesar el valor de retorno de los manejadores de eventos (false) en algún punto de la cadena. Si desea cancelar el evento aquí, ver los comentarios - envolver una llamada a e.stopPropagation() en un bloque try/catch

var handleAndFire = function(e) { 
var ev = new $.Event('stack.overflow'); 

    //you may have to debug and manually inspect to see how 
    //deep the originalEvents go 
    //or you could write your own function to traverse 
    //depth first and find it automatically, I'm lazy. 
    e.originalEvent.originalEvent = {}; //fix for ie < 9 
    ev.originalEvent = e; 
    $(document).trigger(ev);  
} 
$(document).click(handleAndFire); 
+2

Agradable. Descubrí que la modificación de 'e.originalEvent.originalEvent' rompió la llamada' stopPropagation() '(no se produjo un bloqueo pero tampoco se detuvo la propagación) en mi caso, que fue la fuente del bloqueo en primer lugar. Finalmente resolví el problema envolviendo la llamada en try/catchall: 'try {event.stopPropagation(); } catch (e) {} ' – Simon

+0

Esta es una buena solución para llamar a event.stopPropagation(), pero no ayuda si devuelve false y deja que jQuery se detenga. – scaryman

Cuestiones relacionadas