【问题标题】:Dojo function not working on IE8Dojo 功能在 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>

【问题讨论】:

    标签: checkbox internet-explorer-8 dojo cross-browser


    【解决方案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 检查您的代码,这会发现许多一开始看不到的问题.希望我能帮助你。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-03
      • 1970-01-01
      • 2013-10-31
      • 2014-04-11
      相关资源
      最近更新 更多