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

At the beginning, I thought that the query wasn't supported by IE8, but it's not the case.
Such a syntax is supported by IE7 and more recent versions.

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 に答える