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);        
            );
        );
    );

顺便说一句:您应该始终使用===0false 进行比较...您可以使用jsFiddle 让JSLint 检查您的代码,这会发现许多一开始看不到的问题.希望我能帮助你。

【讨论】:

以上是关于Dojo 功能在 IE8 上不起作用的主要内容,如果未能解决你的问题,请参考以下文章

JS li 标签 onclick 在 IE8 上不起作用

jqgrid在IE8上不起作用

摘要身份验证在 IE8、Firefox 和 Chrome 上不起作用

Less Css 在 IE8 和 IE7 上不起作用

A4J reRender 在 IE9 上不起作用 [在 IE8 上工作]

backgroundPositionX 在 Firefox 上不起作用