当前位置: 首页 > 知识库问答 >
问题:

事件处理程序中出错:TypeError:无法读取null的属性“dataset”

韦翰音
2023-03-14

所以当我点击我的汉堡时,我得到了上面提到的这个错误。点击汉堡包后,我的整个页面变成白色,当我右键点击时,什么也不会出现。这里的问题出在哪里,我在网上搜了很多类似的问题。这里只讨论了将script标记放在底部并编写window.onload函数。我已经把script标记放在了正文的底部,但这仍然在发生。错误消息:事件处理程序中出错:TypeError:无法在Jr(chrome-extension://kbfnbcaeplbcioakkpcpgfkobghlhen/src/js/grammarly-check.js:2:103527)在xr上读取属性“dataset”为空。updateState(chrome-extension://kbfnbcaeplbcioakkpcpgfkobghlhen/src/js/grammarly-check.js:2:105004)在chrome-extension:

HTML

<header>
        <nav class="wrapper2">
            <div class="logo">
                <h1>LO</h1>
            </div>
            <div class="navbar">
                <ul>
                    <li><a>ABOUT</a></li>
                    <li><a href="form2.html">ARTICLES</a></li>
                    <li><a href="#newsletter">SUBSCRIBE</a></li>
                </ul>
            </div>
        </nav>
        <div class="hamburger" onclick="open()">
            <span class="bar"></span>
            <span class="bar"></span>
        </div>
        <div class="hero">
            <h1>LOMBOK</h1>
            <h2>HOLISTIC HEALTH & MORE</h2>
            <div class="bigbar"></div>
        </div>
    </header>

萨斯

header{
    background-image: url(../images/heroimg.jpg);
    background-size: cover;
    background-position: 65%;
    height: 100vh;
    margin: 10px;
    nav{
        display: none;
        justify-content:space-between;
        .logo{
            font-size: 1.5rem;
            position: relative;
            top: -10px;
        }
        .navbar ul{
            display: flex;
            width: 480px;
            justify-content: space-between;
            li{
                list-style: none;
                cursor: pointer;
                letter-spacing: 0.2rem;
                a{
                    text-decoration: none;
                    color: black;
                }
            }
            li:last-child{
                border: 2px solid black;
                padding: 15px 20px;
                position: relative;
                top:-16px;
            }
        }
    }
    .hamburger{
        position: absolute;
        top: 2rem;
        right: 1.8rem;
        display: flex;
        flex-direction: column;
        justify-content: space-around;
        width: 30px;
        height: 20px;
        cursor: pointer;
        .bar{
            height: 5px;
            width: 100%;
            background-color:$primary-color;
            border-radius: 10px;
            }
        }
    .hero{
        height: 80vh;
        display: flex;
        flex-direction: column;
        justify-content: center;
        align-items: center;
        line-height: 1.7;
        h1{
            font-size: $primary-size;
            font-weight: 600;
        }
        h2{
            font-size: $secondary-size;
            font-weight: 500;
        }
        .bigbar{
            display: inline-block;
            height: 7px;
            width: 45px;
            background-color: $secondary-color;
            margin-top: 20px;
        }
    }
}
.active{
    display: flex;
    flex-direction: column;
    justify-content: space-around;
    align-items: center;
}
.bgdark{
    background-position: left bottom;
    opacity: 0.4;
}
.inactive{
    display: none;
}

JS

window.onload = function() {
    const open = ()=> {
        const nav = document.querySelector("nav");
        const header=document.querySelector("header");
        const hero=document.querySelector(".hero");
        nav.classList.toggle(".active");
        header.classList.toggle(".bgdark");
        hero.classList.toggle(".inactive");
    };
};

共有1个答案

古明煦
2023-03-14

这里的问题是,open()函数是window对象https://developer.mozilla.org/en-us/docs/web/api/window/open上的一个保留方法,因此当您在onclick参数上添加open()时,它将激发window.open()方法,只要不带任何参数执行该方法,就会打开一个黑页(因此没有DOM要检查)

因此,一个简单的修复方法就是将函数重命名为任何还不是window对象的标准方法的函数。或者只添加一个匿名函数作为对js文件中click事件的回调

document.querySelector('.hamburger').addEventListener('click', function(e) {
    const nav = document.querySelector("nav");
    const header=document.querySelector("header");
    const hero=document.querySelector(".hero");
    nav.classList.toggle("active");
    header.classList.toggle("bgdark");
    hero.classList.toggle("inactive");
});

下面是一些简单的小提琴https://jsfiddle.net/5hdk1op4/

 类似资料:
  • 我收到以下JavaScript错误: TypeError:无法读取null的属性“title” 代码如下: mds-iMac: cmscart imac$nodemo app[nodemo] 1.11.0[nodemo]随时重启,输入[nodemo]观看:.[nodemo]启动(node: 2274)DeprecationWarning:在猫鼬中被弃用 [nodemon]应用程序崩溃-正在等待文件

  • (节点: 7152)未处理的promise拒绝警告:类型错误:无法读取属性'密码'的nullexports.login(C:\用户\niko\桌面\opaca\控制器\controller.js:39: 56)在进程。_tickCallback(内部/进程/next_tick.js:68: 7)(节点: 7152)未处理的promise拒绝警告:未处理promise拒绝。这个错误要么是由于抛出一个

  • React-Native: 0.57.1 react-nady-cli: 2.0.1节点: v8.11.3 npm: 5.6.0 巴别塔版本详情: “devDependencies”:“@babel/runtime”:“^7.0.0”,“babel jest”:“20.0.3”,“babel preset react native”:“^2.1.0”,“jest”:“20.0.4”,“react

  • 问题内容: 我收到以下错误 未捕获的TypeError:无法读取null的属性’appendChild’ myRequest.onreadystatechange @ script.js:20 与我下面的代码 这是我的JavaScript文件 这是内容 这是一个简单文本文件的内容。 我在这里按照@Tejs的建议将脚本标签放在html的底部,但仍然出现此错误。 问题答案: 执行回调时,页面上没有ID

  • 我正在使用Selenium进行iOS移动应用测试。我在使用相应的 我正在使用一个shell脚本来帮助我检查ios\u webkit\u debug\u代理是否可用。如果不存在,它将在2秒内启动ios\u webkit\u debug\u代理。 我的测试很顺利。但在appium中仍然面临一些问题,appium被停止肯定会给出一个 我试着用各种方法来解决这个问题。 重新启动Appium并再次运行。 但

  • 为什么children.length导致未处理拒绝(TypeError):无法读取未定义的属性(读取'length'),特别是因为children.length的值已成功地显示在控制台上?