Dojo 功能在 IE8 上不起作用
Posted
技术标签:
【中文标题】Dojo 功能在 IE8 上不起作用【英文标题】:Dojo function not working on IE8 【发布时间】:2012-10-28 13:06:12 【问题描述】:我有一段代码可以使用单个主复选框(用作切换)来选择/取消选择所有 Dojo 复选框,该复选框在 Firefox 上运行良好,但在 IE8 上却不行。我努力寻找问题,但一无所知,任何人都可以帮忙。我附上以下代码:
<script type="text/javascript">
dojo.require("dojo.parser");
dojo.ready(function()
var checkboxes = [];
dojo.query('#waferCheck_cb input[type=checkbox]').forEach(function(node, index, arr)
checkboxes.push(arr[index].id);
var handle = dojo.connect(dijit.byId(arr[index].id), "onchange", function(evt)
var cbClicked = evt.target.id;
var cbStatus = dijit.byId(cbClicked).get("checked");
setCBSelection(checkboxes,cbClicked,cbStatus );
dojo.disconnect(handle);
);
);
);
function setCBSelection(checkboxes,cb_Clicked, cb_Status)
var len = checkboxes.length;
if(len > 0)
// get index of the checkbox clicked
var cb_pos = 0;
for(var i = 0; i < len; i++)
if(cb_Clicked == checkboxes[i])
cb_pos = i;
break;
// If Select All checkbox clicked, set the other checboxes accordingly
if(cb_pos == 0)
for(var i = 1; i < len; i++)
dijit.byId(checkboxes[i]).set("checked", cb_Status);
else
// If any other checkbox is clicked, set the Select All accordingly
var allCBSameStatus = true;
for(var i = 1; i < len; i++)
var curCBStatus = dijit.byId(checkboxes[i]).get("checked");
if(curCBStatus != cb_Status)
allCBSameStatus = false;
break;
;
if(allCBSameStatus)
dijit.byId(checkboxes[0]).set("checked", cb_Status)
else
if(cb_Status == false)
dijit.byId(checkboxes[0]).set("checked", cb_Status)
</script>
【问题讨论】:
【参考方案1】:我相信 IE8 不喜欢缺少分号。我看到 2 行缺少分号。
dijit.byId(checkboxes[0]).set("checked", cb_Status)
【讨论】:
不,这不是问题,刚刚检查过【参考方案2】:您是否尝试在dojo.ready(..)
之前定义function setCBSelection(...)
(见下文)?也许这会有所帮助,因为它是在定义之前使用的?如果这没有帮助,如果您发布某种错误消息 IE 可能会抛出它可能会很有用......
dojo.require("dojo.parser");
function setCBSelection(checkboxes,cb_Clicked, cb_Status)
var len = checkboxes.length;
if(len > 0)
// get index of the checkbox clicked
var cb_pos = 0;
for(var i = 0; i < len; i++)
if(cb_Clicked == checkboxes[i])
cb_pos = i;
break;
// If Select All checkbox clicked, set the other checboxes accordingly
if(cb_pos === 0)
for(i = 1; i < len; i++)
dijit.byId(checkboxes[i]).set("checked", cb_Status);
else
// If any other checkbox is clicked, set the Select All accordingly
var allCBSameStatus = true;
for(i = 1; i < len; i++)
var curCBStatus = dijit.byId(checkboxes[i]).get("checked");
if(curCBStatus != cb_Status)
allCBSameStatus = false;
break;
if(allCBSameStatus)
dijit.byId(checkboxes[0]).set("checked", cb_Status);
else
if(cb_Status === false)
dijit.byId(checkboxes[0]).set("checked", cb_Status);
dojo.ready(function()
var checkboxes = [];
dojo.query('#waferCheck_cb input[type=checkbox]').forEach(function(node, index, arr)
checkboxes.push(arr[index].id);
var handle = dojo.connect(dijit.byId(arr[index].id), "onchange", function(evt)
var cbClicked = evt.target.id;
var cbStatus = dijit.byId(cbClicked).get("checked");
setCBSelection(checkboxes,cbClicked,cbStatus );
dojo.disconnect(handle);
);
);
);
顺便说一句:您应该始终使用===
与0
或false
进行比较...您可以使用jsFiddle 让JSLint 检查您的代码,这会发现许多一开始看不到的问题.希望我能帮助你。
【讨论】:
以上是关于Dojo 功能在 IE8 上不起作用的主要内容,如果未能解决你的问题,请参考以下文章
摘要身份验证在 IE8、Firefox 和 Chrome 上不起作用