Хорошо, я полностью запутался в этом.
У меня есть сценарий, который получает набор значений из объекта 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()
}
}
};
function stockInit () {
alert ("НАЧАЛО: stockInit ()");
// TODO: Вы получите опцию «вкл» и «выкл»,
// Один из них будет иметь атрибут "selected" из "selected",
// а другой будет иметь атрибут "selected" из ""
//
// Опция, которая имеет атрибут "selected", равный ""
// создаст флажок, который не отмечен.
//
// Опция, которая имеет атрибут «selected» из «selected»
// создаст флажок, который отмечен.
//
// Зачем? Вы спрашиваете ... потому что это просто так
// настроить.
для (var item в ShoppingCart)
{
// // 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()");
}
И, пожалуйста, не спрашивайте, почему я так поступаю ... все, что я могу вам сказать, это то, что у меня нет доступа к бэкэнд-коду ... так что я получаю то, что получаю ...