2009-06-26 5 views
1

これは完全に混乱しています。Javascriptを使用してIE7でチェックボックスがチェックされず、エラーは発生しません。

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(){ 警告わかりません( "BEGIN:stockInitを()"); // TODO: の "on"および "off"オプションを受け取ります// "selected"属性が "selected"、 //になり、もう一方が "selected" " // //" selected "属性が" "のオプションは、チェックされていないチェックボックスを生成します。 // // "selected属性"を選択した場合、 " //チェックボックスが表示されます。 //
//なぜですか?これはちょうど方法のものなので。(ショッピングカート内のvarアイテム) { // //はconsole.log( "処理項目:" +アイテム)について //セットアップ であり、私は「なぜ

 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()"); 
} 

と質問しないでください。このようにしています...私が本当にあなたに言うことができるのは、バックエンドコードにアクセスできないということです。だから、私が得たものを得る...

+0

にあるチェックボックスを挿入した後にチェックパラメータを設定して、あなただけの「optionInputを設定しようとしています.checked = true; "変更があるかどうかを確認するには? –

+0

新しいタグを提案する:空白 - 狂気。真剣に、113以下のスペースを使ってインデントを試みてください。 – phihag

+0

-1誰もがあなたの女性の面白い言葉を見つけられると思っています。 – EoghanM

答えて

13

私はthis is your problem

基本的解決策は、さらにこれを実行することであると思います。

optionInput.defaultChecked = selected; 

または代わりにDOM

+0

heh、面白い...私は「DOMに追加された後にチェックされている」と言うつもりだったが、それはうまくいったように見えるが...このケースでは実際にループの中からとにかくそれを行います –

+0

うわーはあいまいでした。 – leeand00

+0

よく私は以前に似たような問題があったと思っていましたが、これはそうでした:) –

関連する問題