En Firefox este código funciona correctamente:
Código javascript:
Ver original
var OPTION_SESSION = 0; var OPTION_PRIVACY = 1; var OPTION_VISUAL = 2; var OPTION_USER_DATA = 3; var OPTION_PERSONAL_DATA = 4; var current_option = null; var menu_options = new Array(); var panels = new Array(); function initialize() { menu_options[OPTION_SESSION] = document.getElementById('OPTION_0'); menu_options[OPTION_PRIVACY] = document.getElementById('OPTION_1'); menu_options[OPTION_VISUAL] = document.getElementById('OPTION_2'); menu_options[OPTION_USER_DATA] = document.getElementById('OPTION_3'); menu_options[OPTION_PERSONAL_DATA] = document.getElementById('OPTION_4'); panels[OPTION_SESSION] = document.getElementById('PANEL_0'); panels[OPTION_PRIVACY] = document.getElementById('PANEL_1'); panels[OPTION_VISUAL] = document.getElementById('PANEL_2'); panels[OPTION_USER_DATA] = document.getElementById('PANEL_3'); panels[OPTION_PERSONAL_DATA] = document.getElementById('PANEL_4'); attach_menu_option_event(OPTION_SESSION, 'click', show_panel); attach_menu_option_event(OPTION_PRIVACY, 'click', show_panel); show(OPTION_SESSION); current_option = OPTION_SESSION; } function show_panel() { [B]var option = parseInt(this.id.charAt(7))[/B]; if(current_option != null) hide(current_option); current_option = option; show(option); } function show(panel) { panels[panel].style.display = 'block'; } function hide(panel) { panels[panel].style.display = 'none'; } function attach_menu_option_event(option, evnt, callback) { var element = menu_options[option]; if (element.addEventListener) element.addEventListener(evnt,callback,false); else if (element.attachEvent) element.attachEvent("on"+evnt, callback); }
La línea que está en negrita es donde me falla en Internet Explorer. Esto es porque en Firefox cuando se dispara un evento, en la función que maneja este evento la palabra reservada this apunta hacia el objeto que disparo el mismo, en cambio en IE apunta al objeto window. Por lo tanto, aquí veo dos alternativas para hacer que esto funcione en ambos navegadores:
- Cuando se dispara el evento, en Internet Explorer, de alguna forma obtener una referencia a la capa que disparo el mismo.
- Pasarle un argumento, que en este caso sería el índice que ocupa la opción correspondiente cuando creo el manejador de eventos para cada opción del menú
¿Alguna idea de cómo hacerlo?.
Saludos.