Pregunta

Tengo un WebScript (archivo .js) desarrollado para una aplicación Alfresco. Maneja un botón que muestra un formulario destinado a seleccionar miembros que se han suscrito a un espacio al aire libre, para enviarles un correo.
Todas las casillas de verificación se generan dinámicamente con los nombres de los suscriptores.
Puede verificar cualquier miembro que desee y también tiene una casilla de verificación especial que le permite seleccionar o anular la selección de todos los miembros.
Esta casilla de verificación específica funciona correctamente en Chrome y Firefox.
Sin embargo, cuando lo verifica en Internet Explorer 8, ninguno de los miembros es seleccionado o deseleccionado, ya sea que los nombres sean cheques o no.
Aquí está la muestra de código de la generación de formularios y de las funciones OnClick activadas cuando verifica la casilla de verificación:

   updateMembersList : function TS_updateMembersList(containerId)
   {
       var div = Dom.get(containerId);
       div.innerHTML = "<div class=\"memberDiv\">" +
           "<input type=\"checkbox\" id=\"selectDeselectAllCb\" checked=\"true\" onchange=\"YAHOO.Bubbling.fire('selectDeselectAllChanged')\" class=\"memberCb\"/>" +
           "<label for=\"selectDeselectAllCb\" class=\"memberLabel\">" + 
           this.msg('label.selectDeselectAll') + "</label>" +
           "</div>";

       for (var i=0; i<this.members.length; i++)
       {
           var member = this.members[i];
           var avatar = Alfresco.constants.URL_CONTEXT + "/components/images/no-user-photo-64.png";

           if (member.authority.avatar && member.avatar != "")
           {

               avatar = Alfresco.constants.PROXY_URI + member.authority.avatar + "?c=force";
           }
           div.innerHTML += "<div class=\"memberDiv\">" +

                "<input type=\"checkbox\" id=\"cb_" + member.authority.userName + "\" checked=\"true\" onchange=\"YAHOO.Bubbling.fire('selectDeselectMemberChanged')\" class=\"memberCb\"/>" +
                "<label for=\"cb_" + member.authority.userName + "\" class=\"memberLabel\">" + 
                        member.authority.firstName + " " + member.authority.lastName + "</label>" +
                "</div>";
       }
   },


   selectDeselectAllChanged: function selectDeselectAllChanged(){
       var selectDeselectAllCb = Dom.get('selectDeselectAllCb');
       var checked = selectDeselectAllCb.checked;
       console.log("Select All");
       var cbs = YAHOO.util.Selector.query("input[id^='cb_']");

       for (var i=0, j=cbs.length; i<j; i++)
       {
           var cb = cbs[i];
           cb.checked = checked;
       }
   },

   selectDeselectMemberChanged: function selectDeselectMemberChanged(){
       var selectDeselectAllCb = Dom.get('selectDeselectAllCb');
       var cbs = YAHOO.util.Selector.query("input[id^='cb_']");

       var firstChecked;
       if (cbs[0] != null){
           firstChecked = cbs[0].checked;
       }

       for (var i=0, j=cbs.length; i<j; i++)
       {
           var cb = cbs[i];
           if (cb.checked === firstChecked){
               continue;
           }
           else{
               selectDeselectAllCb.checked = false;
               return;
           }
       }
       selectDeselectAllCb.checked = firstChecked;
   },

Al principio, pensé que la consulta no era apoyada por IE8, pero no es el caso.
Tal sintaxis es compatible con IE7 y versiones más recientes.

¿Fue útil?

Solución 2

He resuelto el problema. He reemplazado el onchange manejador de eventos por un onclick controlador de eventos. De hecho, OnChange tiene un comportamiento aleatorio en Internet Explorer, mientras que onclick Funciona bien en la mayor parte del caso. Gracias por la ayuda.

Otros consejos

Intenta quitar console.log("Select All"); y reemplácelo con alfresco.logger.debug ("Sellect All"); IE no le gusta el objeto de la consola.

Además, ejecute su código en jslint: si tiene un JSON inválido allí en algún lugar, es decir, se detiene.

Además, intente ejecutar IE en modo de desarrollador: configúrelo para mostrarle errores de script y sabrá dónde se detiene.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top