首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么变量按钮被赋值为窗口对象,以及如何修复?

为什么变量按钮被赋值为窗口对象,以及如何修复?
EN

Stack Overflow用户
提问于 2021-04-30 12:59:23
回答 3查看 56关注 0票数 0

我想在单击时分配带有按钮元素的const button= e.currentTarget;,但它是用窗口对象分配的,因此const container= button.parentNode;也不起作用。你能解决这个错误吗?我只提到按钮和容器所在的section元素。

代码语言:javascript
运行
AI代码解释
复制
     window.addEventListener("DOMContentLoaded", function(e) {
       const orderButtons = document.querySelectorAll("button[data-order]");
       orderButtons.forEach(function(button){

        window.addEventListener("click", function(e) {

            //button is assigned with window object, should be assigned clicked button
 
            const button= e.currentTarget; 
            const container= button.parentNode;

            const order={
                id: button.getAttribute("data-order"),
                title: container.querySelector(".title").innerText,
                price: container.querySelector(".price").innerText,
                desc: container.querySelector(".desc").innerText
            };
           
            localStorage.setItem("order", JSON.stringify(order));

            const url= window.location.href.replace("pies.html","order.html");
            window.location.href=url;
        });
       });
   }); 
代码语言:javascript
运行
AI代码解释
复制
    <section class="desktop-column">
             <div class="pie">
                 <img src="images/apple-pie.png" alt="Apple Pie">
                 <div class="columns">
                    <div class="title">Apple Pie</div>
                    <div class="price">300</div>
                 </div>
                 <p class="desc">Our famous pie.</p>
                 <button data-order="apple-pie">Order</button>
                </div>

                <div class="pie">
                    <img src="images/cherry-pie.png" alt="Cherry Pie">
                    <div class="columns">
                       <div class="title">Cherry Pie</div>
                       <div class="price">340</div>
                    </div>
                    <p class="desc">Our summer classic!.</p>
                    <button data-order="cherry-pie">Order</button>
                   </div>
         </section>

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-04-30 16:17:29

在上面的代码中,在window对象上调用了error is事件侦听器

代码语言:javascript
运行
AI代码解释
复制
window.addEventListener("click", function(e) {
const button= e.currentTarget; 
const container= button.parentNode;

这就是为什么当button被赋值时,窗口对象被赋值,而没有窗口对象的parentNode,这就是为什么containerundefined的原因。

代码语言:javascript
运行
AI代码解释
复制
           `const order={
            id: button.getAttribute("data-order"),
            title: container.querySelector(".title").innerText,
            price: container.querySelector(".price").innerText,
            desc: container.querySelector(".desc").innerText
        };`

由于containerbutton的值错误,getAttribute querySelector无法选择DOM元素,从而导致Uncaught TypeError

正确的代码片段-

代码语言:javascript
运行
AI代码解释
复制
button.addEventListener("click", function(e) {
        const button= e.currentTarget;
        const container= button.parentNode;
        const order={
            id: button.getAttribute("data-order"),
            title: container.querySelector(".title").innerText,
            price: container.querySelector(".price").innerText,
            desc: container.querySelector(".desc").innerText
        };
       });
票数 -1
EN

Stack Overflow用户

发布于 2021-04-30 13:02:16

currentTarget是事件处理程序绑定到的元素。

您需要为最初在其上触发事件的元素提供纯target

票数 1
EN

Stack Overflow用户

发布于 2021-04-30 13:05:13

我认为你想要你按下的按钮的data-order

代码语言:javascript
运行
AI代码解释
复制
window.addEventListener("DOMContentLoaded", function(e) {
       const orderButtons = document.querySelectorAll("button[data-order]");
       orderButtons.forEach(function(button){

        button.addEventListener("click", function(e) {

            //button is assigned with window object, should be assigned clicked button
            
            const container= this.parentNode;

            const order={
                id: this.getAttribute("data-order"),
                title: container.querySelector(".title").innerText,
                price: container.querySelector(".price").innerText,
                desc: container.querySelector(".desc").innerText
            };
           
            console.log(order);
        });
       });
   });
代码语言:javascript
运行
AI代码解释
复制
<section class="desktop-column">
             <div class="pie">
                 <img src="images/apple-pie.png" alt="Apple Pie">
                 <div class="columns">
                    <div class="title">Apple Pie</div>
                    <div class="price">300</div>
                 </div>
                 <p class="desc">Our famous pie.</p>
                 <button data-order="apple-pie">Order</button>
                </div>

                <div class="pie">
                    <img src="images/cherry-pie.png" alt="Cherry Pie">
                    <div class="columns">
                       <div class="title">Cherry Pie</div>
                       <div class="price">340</div>
                    </div>
                    <p class="desc">Our summer classic!.</p>
                    <button data-order="cherry-pie">Order</button>
                   </div>
         </section>

注意:我将代码段的localStorage()更改为console.log()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67334373

复制
相关文章
对象不再使用时,为什么要赋值为 null ?
许多Java开发者都曾听说过“不使用的对象应手动赋值为null“这句话,而且好多开发者一直信奉着这句话;问其原因,大都是回答“有利于GC更早回收内存,减少内存占用”,但再往深入问就回答不出来了。
用户4283147
2022/10/27
5700
对象不再使用时,为什么要赋值为 null ?
Java : 对象不再使用时,为什么要赋值为 null ?
原文链接:http://www.polarxiong.com/
业余草
2019/12/03
1.3K0
Oracle PL/SQL例9:为变量赋值
本系列以摘自《Database PL/SQL Language Reference》的PL/SQL代码例为主进行介绍。
SQLplusDB
2022/12/20
1.2K0
java类和对象——变量赋值方法
此处的set和get的方法可以用 atl + insert 选择Getter and Setting实现
小雨的分享社区
2022/10/26
1.2K0
变量赋值
Tcl脚本的构成如图所示,可以只包含一条命令,也可以包含多条命令,命令之间可以是分号隔开,也可以是换行。如下图所示。
Lauren的FPGA
2019/10/31
2.7K0
使用 Apollo 为静态变量赋值的方法
Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。
CG国斌
2021/12/07
2.9K0
[Go] 理解(*interface{})(nil) 赋值的变量是否为nil
var c interface{} c = (*interface{})(nil)
唯一Chat
2021/05/13
1.1K0
[Go] 理解(*interface{})(nil) 赋值的变量是否为nil
java中为final变量赋值的几种方式
使用final修饰变量,很多人第一时间想到的就是不可变。然后以为变量必须得在声明的时候就为其赋初始值,其实不然,本文将详细讲解java中使用final修改的变量的赋值问题。
用户7886150
2020/12/07
2.6K0
【C++】匿名对象 ② ( 将 “ 匿名对象 “ 初始化给变量 | 将 “ 匿名对象 “ 赋值给变量 )
" 匿名对象 " 的 作用域 仅限于其所在的 表达式 , 这句表达式 执行完毕后 , 匿名对象 自动销毁 ;
韩曙亮
2023/10/15
5200
【C++】匿名对象 ② ( 将 “ 匿名对象 “ 初始化给变量 | 将 “ 匿名对象 “ 赋值给变量 )
变量解构赋值
既然有时间在最后壮烈牺牲,不如完美地活到最后一刻——坂田银时/银魂 前两天有朋友问我,这个写法看不懂,让我给他讲讲 它这里用到了一个ES6的新特性:解构赋值 这里简单复现一下 var param = { columns: { property: "我是property" }, data: ["我是", "data", "数组"] } var {columns,data} = param console.log(columns) console.log(data) 输出结果 可以看到
阿超
2022/08/16
1.9K0
变量解构赋值
ES6基础语法之变量解构赋值(对象)
昨天简单看了并且了解了数组的解构赋值,今天进一步看一下对象的解构赋值,并逐渐深入看一些复杂的对象结构赋值是怎么样子的!!!
十月梦想
2018/08/29
6230
makefile变量赋值
在定义变量的值时,我们可以使用其它变量来构造变量的值,在Makefile中有两种方式来在用变量定义变量的值。
全栈程序员站长
2022/07/15
1.5K0
js中多个Date对象变量间赋值互相影响
<head> <title></title> <script type="text/javascript"> function pageLoad() { var dtmNow = new Date(); var dtmDt1 = dtmNow; dtmDt1.setMinutes(20); var divContent = document.getElementById("divC
欢醉
2018/01/22
6.8K0
JAVA学习笔记之JAVA 对象引用以及赋值
       初学Java时,在很长一段时间里,总觉得基本概念很模糊。后来才知道,在许多Java书中,把对象和对象的引用混为一谈。可是,如果我分不清对象与对象引用,
Jetpropelledsnake21
2019/02/15
8980
变量的解构赋值
ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring)。
小小杰啊
2022/12/21
3.9K0
变量的解构赋值
上面代码中,函数move的参数是一个对象,通过对这个对象进行解构,得到变量x和y的值。如果解构失败,x和y等于默认值。
达达前端
2019/08/19
4.2K0
【小家java】java中为final变量赋值的几种方式
final修饰的变量,很多人第一印象就是不可变三个字。然后以为它只能在申明的时候就必须得赋值,其实不然,本文就重点讲述平时我们用到的final变量的赋值问题。
YourBatman
2019/09/03
2.9K0
PHP的变量赋值
这个标题估计很多人会不屑一顾,变量赋值?excuse me?我们学开发的第一课就会了好不好。但是,就是这样基础的东西,反而会让很多人蒙圈,比如,值和引用的关系。今天,我们就来具体讲讲。
硬核项目经理
2019/12/04
3.6K0
随笔:Golang 循环变量引用问题以及官方语义修复
这篇文章谈一个已经在 Golang 中存在多年的,几乎每一个新手都要被坑一遍的设计:引用捕获了循环变量,且逃逸出循环迭代范围而造成的逻辑错误。
Miigon
2023/03/16
1.8K0
点击加载更多

相似问题

oNode被设置为零,但是为什么,以及我如何修复它?

13

为什么布尔变量没有被赋值为true?

10

类变量被赋值为null

34

为什么方法参数被重新赋值为局部变量?

20

宽度不匹配:信号赋值的向量范围内的变量。为什么以及如何修复?

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档