JavaScript-флажок selectAll \ deselectAll не работает в IE8 - PullRequest
2 голосов
/ 16 февраля 2012

У меня есть Webscript (файл .js), разработанный для приложения Alfresco. Он обрабатывает кнопку, которая отображает форму, предназначенную для выбора участников, которые подписались на пространство Alfresco, чтобы отправить им письмо.
Все флажки генерируются динамически с именами подписчиков.
Вы можете выбрать любого участника, которого хотите, и у вас также есть специальный флажок, который позволяет выбрать или отменить выбор всех участников.
Этот специальный флажок работает правильно в Chrome и Firefox.
Однако, когда вы проверяете его в Internet Explorer 8, ни один из участников не выбирается и не отменяется, независимо от того, проверяются ли их имена. Вот пример кода генерации формы и функций onClick, запускаемых при установке флажка:

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

В начале я думал, что запрос не поддерживается IE8, но это не так.
Такой синтаксис поддерживается IE7 и более поздними версиями.

Ответы [ 2 ]

1 голос
/ 21 февраля 2012

Я решил проблему. Я заменил обработчик событий onchange на обработчик событий onclick. Действительно, onchange имеет случайное поведение в Internet Explorer, тогда как onclick работает в большинстве случаев нормально. Спасибо за помощь.

1 голос
/ 17 февраля 2012

Попробуйте удалить console.log("Select All"); и замените его на Alfresco.logger.debug («Выбрать все»); IE не любит консольный объект.

Кроме того, запустите ваш код на jslint - если у вас где-то есть недопустимый json, IE останавливается.

Также попробуйте запустить IE в режиме разработчика - настройте его так, чтобы он отображал ошибки скрипта, и вы будете знать, где он останавливается.

...