循环中出现意外错误

时间:2015-04-13 05:31:58

标签: javascript loops

function setL(sname, svalue) {
    localStorage.setItem(sname, svalue)
}

function getL(sname) {
    if (!localStorage.getItem(sname)) localStorage.setItem(sname, "")
    return localStorage.getItem(sname)
}

function delL(sname) {
    localStorage.removeItem(sname)
}


for (i = 0; i < options.length; i++) {
    if (getL(options[i]) == null) {} else {
        $("#" + options[i]).attr("value", getL(options[i]));
        $(options_target[i]).css(options_change[i], getL(options[i]));
    }
};

getL获取localstorage的价值。所以我的循环是做什么的,对于

  var options = ["bg_color", "bottom_bar_color", "button_color", "dialog_color", "notify_color", "button_text_color"];
  var options_target = ["body", "#bottom", ".ugly-button", ".dialog", ".notification .notification-body", ".ugly-button"];
  var options_change = ["background", "background", "background", "background", "color"];

它使用&#34;选项&#34;为相应的元素设置适当的css值。数组的值被设置为localstorage ..

这曾经在一天前工作..但现在我收到一个意想不到的错误..这是

  

未捕获的TypeError:无法读取属性&#39;替换&#39;未定义的

我的代码中没有替换,所以任何人都可以帮助我调试代码并在可能的情况下修复它吗?

2 个答案:

答案 0 :(得分:1)

var options = ["bg_color", "bottom_bar_color", "button_color", "dialog_color", "notify_color", "button_text_color"];
  var options_target = ["body", "#bottom", ".ugly-button", ".dialog", ".notification .notification-body", ".ugly-button"];
  var options_change = ["background", "background", "background", "background", "color"];

选项长度为6。 options_target长度为7。 options_change长度为5.

所以:我从0到5。

$(options_target[i]).css(options_change[i], getL(options[i]));

当我5岁时: options [i]有值,options_change [i]未定义,因为它超出了范围......

答案 1 :(得分:0)

JQuery 1.6.4运行您的代码。

FIDDLE

然而,

JQuery 2.1.3会出现上述错误。

FIDDLE

如果你最近确实更新了JQuery,那很可能是你的问题。

修改

奇怪的是它与早期的JQuery一起工作,因为你的错误是你的最后一个列表与前两个列表的长度不同。因此,当循环遍历第一个列表时,您尝试访问不存在的options_change的inde。例如,尝试push "color" options_change var options = ["bg_color","bottom_bar_color","button_color","dialog_color","notify_color","button_text_color"]; var options_target = ["body","#bottom",".ugly-button",".dialog",".notification .notification-body",".ugly-button"]; var options_change = ["background","background","background","background","color", "color"]; function setL(sname, svalue) { localStorage.setItem(sname, svalue) } function getL(sname) { if(!localStorage.getItem(sname)) localStorage.setItem(sname, "") return localStorage.getItem(sname) } function delL(sname) { localStorage.removeItem(sname) } for(i = 0; i < options.length;i++){ if(getL(options[i]) == null){ } else { $("#" + options[i]).attr("value" , getL(options[i]) ); $(options_target[i]).css(options_change[i] , getL(options[i]) ); } }; alert("No Errors!"); ,它可以正常运行:

{{1}}

FIDDLE