1

firefox では正常に動作するが IE8 では動作しない単一のマスター チェックボックス (トグルとして機能する) を使用して、すべての Dojo チェックボックスを選択/選択解除するコードがあります。私は問題を見つけようと懸命に努力しましたが、無知でした。誰か助けてください。以下のコードを添付します:

    <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>
4

2 に答える 2

0

IE8 はセミコロンの欠落を好まないと思います。セミコロンがない 2 行が表示されます。

dijit.byId(checkboxes[0]).set("checked", cb_Status)
于 2012-11-08T11:55:39.243 に答える
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);        
            });
        });
    });

===ところで、比較には常に0or false... を使用する必要があります。jsFiddle を使用して、JSLint にコードをチェックさせることができます。これにより、最初は見られない多くの問題が検出されます。お役に立てれば幸いです。

于 2012-11-09T07:25:41.950 に答える