JavaScript Selectall Deselectall复选框函数在IE8上不起作用
-
25-10-2019 - |
题
我有一个为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和更多最新版本支持这样的语法。
解决方案 2
我解决了问题。我替换了 onchange
活动处理程序 onclick
活动处理程序。确实,Onchange在Internet Explorer上具有随机行为,而 onclick
在大多数情况下,工作正常。谢谢您的帮助。
其他提示
尝试删除 console.log("Select All");
并将其替换为alfresco.logger.debug(“ sellect all”); IE不喜欢控制台对象。
另外,在JSlint上运行代码 - 如果您在某处有无效的JSON,则停止。
另外,尝试在开发人员模式下运行IE-将其设置为显示脚本错误,您将知道它停止的位置。
不隶属于 StackOverflow