javascript selectal deselectallチェックボックス機能はie8で動作しません
-
25-10-2019 - |
質問
Alfrescoアプリケーション用に開発されたWebScrip(.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およびより最近のバージョンによってサポートされています。
解決 2
私は問題を解決しました。私は置き換えました onchange
Anによるイベントハンドラー onclick
イベントハンドラー。実際、Onchangeにはインターネットエクスプローラーでランダムな動作がありますが、 onclick
ほとんどの場合、正常に動作します。助けてくれてありがとう。
他のヒント
削除してみてください console.log("Select All");
alfresco.logger.debug( "sellect all")に置き換えます。 IEはコンソールオブジェクトが好きではありません。
また、JSLINTでコードを実行します - どこかに無効なJSONがある場合は、停止します。
また、開発者モードでIEを実行してみてください - それを設定してスクリプトエラーを表示すると、どこで停止するかがわかります。