2009-06-26 7 views
1

Okay, ich bin total verwirrt auf diesem.Checkboxen werden nicht IE7 mit Javascript, und noch keine Fehler überprüfen

Ich habe ein Skript, das eine Reihe von Werten von einem JSON-Objekt empfängt und eine Reihe von Kontrollkästchen erstellt und entweder diese Kontrollkästchen basierend auf ihren Werten aktiviert oder deaktiviert.

Dieses Skript behandelt mich wie eine Frau mich behandelt ...

„Wenn Sie nicht wissen, was falsch ist, dann gehen zu sagen, dass ich dich nicht ...“

Das Skript funktioniert richtig in IE8, Firefox3, etc ... etc ...

jedoch ...

in IE7 schlägt das Skript die Kontrollkästchen abhaken. Es zeigt keine Fehler an und von dem, was ich sagen kann, läuft das Skript gut. Ich überprüfe einfach nicht das Kontrollkästchen, und ich weiß nicht, warum ...

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

Funktion stockInit() { alert ("BEGIN: stockInit()"); // TODO: Sie erhalten eine "an" und eine "aus" -Option, // Man wird ein "ausgewähltes" Attribut von "ausgewählt", // und die andere wird ein "ausgewähltes" Attribut von " " // // die Option, die das hat‚ausgewählt‘Attribut‚‘ // wird eine Checkbox erzeugen, die nicht überprüft wird. // // Die Option, die das „ausgewählte Attribut des‚ausgewählten‘ // hat eine Checkbox zu erzeugen, die überprüft wird. //
// Warum, fragen Sie ... denn das ist die Sache, nur die Art und Weise ist ist // Setup für (var Artikel in shoppingCart) { // // console.log ("Bearbeitungspunkt" + 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()"); 
} 

Und bitte nicht fragen, warum ich m Dinge auf diese Weise zu tun ... alles, was ich dir wirklich sagen kann ist, dass ich keinen Zugriff auf den Backend-Code habe ... also bekomme ich, was ich bekomme ...

+0

gesetzt haben versucht, die Sie gerade „optionInput Einstellung .checked = true; "um zu sehen, ob sich etwas ändert? –

+0

Vorschlagen eines neuen Tags: Whitespace-Wahnsinn. Versuchen Sie ernsthaft, mit weniger als 113 Leerzeichen einzurücken. – phihag

+0

-1 für die Annahme, dass jeder Ihren Bezug zu Frauen lustig finden wird. – EoghanM

Antwort

13

Ich denke, this is your problem

im Grunde die Lösung dieses zusätzlich zu tun ist:

optionInput.defaultChecked = selected; 

oder alternativ die geprüfte Parameter nach dem Einfügen des Kästchens in das DOM

+0

heh, interessant ... Ich würde sagen "set.checked nachdem es an das DOM angehängt wurde", und es sieht so aus, als hätte das funktioniert ... aber er kann nicht tun Sie das wirklich in diesem Fall sowieso seit seiner innerhalb einer Schleife –

+0

Wow, die obskur war. – leeand00

+0

Nun dachte ich, dass ich vor einiger Zeit ein ähnliches Problem hatte, und ja - das war es :) –