JavaScript全局动态变量在函数之间未定义,似乎是局部作用域

neogeek23

我对这两个功能的交互存在疑问。它们用于元素的onclick调用中。本质上(由于无法控制的事情),我需要记住隐藏元素的时间和内容。

除了show函数中的未定义检查,一切都按我想要的工作。当我隐藏事物时,我创建了一个全局变量,当我想要显示事物时,我想再次使用它。我唯一的问题是在show函数中,似乎我认为不是全局变量的东西。

function branchShow(targetID, triggerID){
    var target = document.getElementById(targetID);
    var trigger = document.getElementById(triggerID);
    var parentID = trigger.parentElement.parentElement.parentElement.parentElement.id;
    var globalMemory = "wasIHiddenBefore_" + parentID

    if (typeof window[globalMemory] !== "undefined"){
        if (window[globalMemory]) {
            console.log(globalMemory + " is evaluated true");
            window[globalMemory] = false;
        } else {
            console.log(globalMemory + " is evaluated false");
            target.setAttribute("style","display: block;");
        }
    } else {
        console.log(globalMemory + " is undefined");
        target.setAttribute("style","display: block;");
    }
};

function branchHide(targetID, triggerID){
    if (typeof i !== "undefined" ) {var iMemory = i;}
    if (typeof j !== "undefined" ) {var jMemory = j;}
    if (typeof k !== "undefined" ) {var kMemory = k;}
    var target = document.getElementById(targetID);
    target.setAttribute("style","display: none;");

    //don't want to flag on load
    if (hasLoadFinished){
        window["wasIHiddenBefore_" + targetID] == true;
        console.log("wasIHiddenBefore_" + targetID + " created as true");
    }
    .
    .
    .

下面是示例执行的控制台输出。在显示问题时,第四行和第六行是最关键的。

wasIHiddenBefore_1e16f2513f7842d5be352ca01b5c1c3f is undefined
wasIHiddenBefore_f82bdc0c527541e68fc405e9ac70015b is undefined
wasIHiddenBefore_2d869e44f4c44454a8415eecbd64061e created as true
wasIHiddenBefore_f82bdc0c527541e68fc405e9ac70015b created as true
wasIHiddenBefore_1e16f2513f7842d5be352ca01b5c1c3f is undefined
wasIHiddenBefore_f82bdc0c527541e68fc405e9ac70015b is undefined

有谁知道为什么我要看到我所看到的东西,以及我可以做些什么来使这些动态变量在函数之间全局作用?谢谢。

贝吉

window["wasIHiddenBefore_" + targetID] == true;是比较,而不是作业。尽管记录了“ …创建为true ”,但您从未设置变量。你要window["wasIHiddenBefore_" + targetID] = true;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章