2

我有一个为 Alfresco 应用程序开发的 Webscript(.js 文件)。它处理一个显示表单的按钮,该表单旨在选择订阅了 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 和更新的版本支持这种语法。

4

2 回答 2

1

尝试将其删除console.log("Select All");并替换为 Alfresco.logger.debug("Sellect All"); IE 不喜欢控制台对象。

此外,在 jslint 上运行您的代码 - 如果您在某处有无效的 json,则 IE 会停止。

此外,尝试在开发人员模式下运行 IE - 将其设置为向您显示脚本错误,您就会知道它在哪里停止。

于 2012-02-17T13:26:05.023 回答
1

我已经解决了这个问题。我已经用事件处理程序替换了onchange事件处理onclick程序。实际上,onchange 在 Internet Explorer 上具有随机行为,而onclick在大多数情况下都可以正常工作。谢谢您的帮助。

于 2012-02-21T13:10:35.220 回答