代码之家  ›  专栏  ›  技术社区  ›  leeand00

复选框不会使用javascript签入IE7,但不会出现错误。

  •  1
  • leeand00  · 技术社区  · 16 年前

    好吧,我对这件事很困惑。

    我有一个脚本,它从JSON对象接收一组值,并创建一组复选框,然后根据这些复选框的值选中或取消选中这些复选框。

    该脚本在IE8、FireFox3等中工作正常…等。。。

    然而。。。

    在IE7中,脚本未能勾选复选框。它不显示错误,据我所知,脚本运行得很好。我只是不检查任何复选框,我不知道为什么…

    shoppingCart['Update_Stock_Item_0_NRD%5FHAT2'] = {
                'propeller': {
                                'label'          : 'propeller',                             
                                'optionValues'   : {                                                    
                                                     'on' : {
                                                        'selected': 'selected'
                                                            },
                                                      'off' : {
                                                                'selected': ''
                                                              },
                                                            '' : new String()
                                                    }
                            },
                'sunLogo': {
                                'label'          : 'sunLogo',                           
                                'optionValues'   : {                                                    
                                                     'on' : {
                                                        'selected': 'selected'
                                                            },
                                                      'off' : {
                                                                'selected': ''
                                                              },
                                                            '' : new String()
                                                    }
                            },
                'MSLogo': {
                                'label'          : 'sunLogo',
                                'optionValues'   : {                                                    
                                                     'on' : {
                                                        'selected': 'selected'
                                                            },
                                                      'off' : {
                                                                'selected': ''
                                                              },
                                                            '' : new String()
                                                    }
                            }                           
    };
    

    函数stockInit()。{ alert(“begin:stockinit()”); //TODO:您将收到一个“on”和一个“off”选项, //其中一个的“selected”属性为“selected”, //另一个将具有“selected”属性 / / //具有“selected”属性的选项 //将生成一个未选中的复选框。 / / //具有“selected”属性的选项 //将生成选中的复选框。 / /
    为什么?你问……因为事情就是这样的 //设置。 for(购物车中的var项目) { ////console.log(“处理项:”+item);

            var optionContainer = document.getElementById(item + "_optionContainer");
    
            for(var option in shoppingCart[item])
            {
                if(option != "blank")
                {
                    // // console.log("option: " + option);
    
                    var currentOption = shoppingCart[item][option]['optionValues'];
    
                    // // console.log("currentOption['on']['selected']: " + currentOption['on']['selected']);
                    // // console.log("currentOption['off']['selected']: " + currentOption['off']['selected']);
    
                    // Really you only have to check the one, but just to be through-o
                    var selected = (currentOption['on']['selected'] == 'selected') ? true : false;
                    selected = (currentOption['off']['selected'] == 'selected') ? false : true;
    
                    var label = document.createElement("LABEL");
                    var labelText = document.createTextNode(shoppingCart[item][option]['label']);
                    var optionInput = document.createElement("INPUT");
    
                    var hiddenInput = document.createElement("INPUT");
    
                    optionInput.setAttribute("type", "checkbox");
                    optionInput.checked = selected;
    
                    optionInput.setAttribute("id", option);
                    alert(optionInput.id);
                    alert(optionInput.checked);
    
                    hiddenInput.setAttribute("type", "hidden");
                    hiddenInput.setAttribute("name", option);
                    hiddenInput.setAttribute("id", option + "_hiddenValue");
                    hiddenInput.setAttribute("value", (optionInput.checked) ? "on" : "off");
    
                    label.appendChild(optionInput);
                    label.appendChild(labelText);
                    label.appendChild(hiddenInput);
    
                    (function(id)
                    {
                        optionInput.onclick = function() {
    
                            var hiddenInput = document.getElementById(id + "_hiddenValue");
    
                            hiddenInput.setAttribute("value", (this.checked == true) ? "on" : "off");
                            alert("this.id: " + this.id);
                            alert("this.checked: " + this.checked);
                        }
                    })(optionInput.id);
    
                    optionContainer.appendChild(label);
    
    
                }
            }
            // // console.log("processing item of " + item + " complete");
        }
        alert("END: stockInit()");
    }
    

    请不要问我为什么要这样做…我能告诉你的是我没有访问后端代码的权限…所以我得到了我得到的…

    1 回复  |  直到 7 年前
        1
  •  13
  •   Ramuns Usovs    16 年前

    我猜 this is your problem

    基本上,解决方案是另外执行以下操作:

    optionInput.defaultChecked = selected;
    

    或者在将复选框插入到DOM后设置选中的参数