代码之家  ›  专栏  ›  技术社区  ›  cosmichero2025

比较sessionStorage值时无法调用Javascript函数

  •  0
  • cosmichero2025  · 技术社区  · 10 年前

    我目前正在创建一个flash库,每次按下新按钮以查看新flash时,我都希望看到页面重新加载以显示新广告。我已经解决了控制台的问题。日志并已确定sessionStorage变量设置正确,但当调用back/rand/next()函数时,它会停止运行。任何小费都很有价值。

    (编辑)进入控制台。log('收到随机按钮!');

    代码

     var flashcon, test, temp;
        var back, rand, next;
    
        back = document.getElementById('back');
        rand = document.getElementById('rand');
        next = document.getElementById('next');
        flashcon = document.getElementById('flashcon');
    
        function init() {
            if (sessionStorage.getItem('ref') == 1) {
                console.log('Back button ses received!');
                back();
            } else if (sessionStorage.getItem('ref') == 2) {
                console.log('Rand button ses received!');
                rand();
            } else if (sessionStorage.getItem('ref') == 3) {
                console.log('Next button ses received!');
                next();
            } else {
                console.log('First time or a reset');
            }
    
            // Scripts for the buttons
            back.onclick = function () {
                console.log('Back button pressed');
                sessionStorage.setItem('ref', 1);
                location.reload();
            };
            rand.onclick = function () {
                console.log('Rand button pressed');
                sessionStorage.setItem('ref', 2);
                location.reload();
            };
            next.onclick = function () {
                console.log('Next button pressed');
                sessionStorage.setItem('ref', 3);
                location.reload();
            };
        }
    
        // What switches the flashs
        function back() {
            console.log('Back function');
            sessionStorage.clear();
            if (c == 0) {
                c = paths.length;
            }
            c--;
            displayFiles();
            download();
        }
    
        function rand() {
            console.log('Rand function');
            sessionStorage.clear();
            if (c == paths.length - 1) {
                c = -1;
            }
            c++;
            displayFiles();
            download();
        }
    
        function next() {
            console.log('Next function');
            sessionStorage.clear();
            temp = c;
            while (c == temp) {
                c = Math.floor(Math.random() * paths.length);
            }
            displayFiles();
            download();
        }
    
    1 回复  |  直到 10 年前
        1
  •  2
  •   Deryck    10 年前

    变量和函数的名称相互重叠。

    back, next, rand 都是挂在 ... = document.getElementById('...') 对应的变量名。

    更改函数名或元素对象名,然后重试。

    因此,基本上要扭转这一局面:

    var back, rand, next;
    
    back = document.getElementById('back');
    rand = document.getElementById('rand');
    next = document.getElementById('next');
    

    变成这样:

    var $back, $rand, $next;
    
    $back = document.getElementById('back');
    $rand = document.getElementById('rand');
    $next = document.getElementById('next');
    

    当然,还要编辑代码中后面的匹配位置,使它们指向正确的变量。