Dojo功能无法在IE8上运行

时间:2012-11-08 10:35:10

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

我有一段代码可以使用单个主复选框(用作切换)来选择/取消选择所有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>

2 个答案:

答案 0 :(得分:0)

我相信IE8不喜欢丢失分号。我看到2行缺少分号。

dijit.byId(checkboxes[0]).set("checked", cb_Status)

答案 1 :(得分:0)

您是否尝试在function setCBSelection(...)之前定义dojo.ready(..)(见下文)?也许这有助于它在定义之前使用它?如果这没有帮助,如果你发布某种错误消息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检查您的代码,从而解决许多问题从一开始就看不出来。希望我能帮助你。