Frage

Ich habe eine WebScript (.js -Datei) für eine Alfresco -Anwendung entwickelt. Es behandelt eine Schaltfläche, auf der ein Formular angezeigt wird, das darauf abzielt, Mitglieder auszuwählen, die sich für einen Raum im Freien abonniert haben, um ihnen eine E -Mail zu senden.
Alle Kontrollkästchen werden dynamisch mit den Namen der Abonnenten generiert.
Sie können jedes gewünschte Mitglied überprüfen und haben auch ein spezielles Kontrollkästchen, mit dem Sie alle Mitglieder auswählen oder deaktivieren können.
Dieses spezifische Kontrollkästchen funktioniert ordnungsgemäß für Chrome und Firefox.
Wenn Sie es jedoch im Internet Explorer 8 überprüfen, wird keiner der Mitglieder ausgewählt oder abgewählt, unabhängig davon, ob sie überprüft werden oder nicht.
Hier ist das Code -Beispiel der Formulargenerierung und der Onclick -Funktionen, die ausgelöst werden, wenn Sie das Kontrollkästchen überprüfen:

   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;
   },

Am Anfang dachte ich, dass die Abfrage von IE8 nicht unterstützt wurde, aber es ist nicht der Fall.
Eine solche Syntax wird von IE7 und neueren Versionen unterstützt.

War es hilfreich?

Lösung 2

Ich habe das Problem gelöst. Ich habe das ersetzt onchange Event -Handler von einem onclick Event -Handler. In der Tat hat Onchange ein zufälliges Verhalten im Internet Explorer, während onclick Funktioniert in den meisten Fällen gut. Danke für die Hilfe.

Andere Tipps

Versuchen Sie es zu entfernen console.log("Select All"); und ersetzen Sie es durch alfresco.logger.debug ("Sellect All"); IE mag kein Konsolenobjekt.

Führen Sie auch Ihren Code auf JSLINT aus - wenn Sie dort irgendwo einen ungültigen JSON haben, hört der IE auf.

Versuchen Sie auch, den IE im Entwicklermodus auszuführen. Richten Sie es ein, um Ihnen Skriptfehler zu zeigen, und Sie werden wissen, wo es stoppt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top