如何从 querySelectorAll 获取所有元素并与 addEventListener 一起使用

2023-12-01

我有一个块。当我单击加号时,会创建 4 个子块。当我单击任何子块加号按钮时,我必须添加(rooms-guests-plus类),它们增加自0 to 5当单击减号按钮时(rooms-guests-minus类)以同样的方式减少。

const room = document.querySelector('.room-guests-count');
const form = document.querySelector('.form-open');
const adultsChildren = document.querySelector('.adults-children');
const adultsChildrenWrapper = document.querySelector('.adults-children-wrapper');

const toggleRoom = () => {
  const addRoomButton = document.querySelector('#add-room');
  const removeRoomButton = document.querySelector('#remove-room');
  const countRoom = document.querySelector('.form-text');
 
  const addSection = () => {
    const wrapper = document.createElement("div"); 
    wrapper.className = "adults-children-wrapper"; 
    wrapper.innerHTML = adultsChildrenWrapper.innerHTML;                
    adultsChildren.appendChild(wrapper).querySelector(".room-count").innerText = countRoom.value;

  }
  const removeSection = () => {
    adultsChildren.lastChild.remove();
  }
  
  addRoomButton.onclick = () => {
    if(countRoom.value == 4) return;
    countRoom.value++;
    addSection();  
   }
  removeRoomButton.onclick = () => {
    if(countRoom.value == 1) return;
    countRoom.value--;
    removeSection();
  }
}
toggleRoom();
body {
  background:#000;
}
/*ROOM GUESTS COUNT*/
.room-guests-count {
	width: 32.2%;
	cursor: pointer;
	margin-right: 4%;
	background: #fff;
	float: left;
	height: 66px;
	margin-right: 149px;
}
.form-open {
	display: block;
	position: absolute;
	z-index: -1;
	top: 85px;
	background-color: #fff;
	height: auto;
	width: 348px;
}

.form-open:after {
	content: '';
	position: absolute;
	width: 0;
	height: 0;
	border-bottom: 10px solid #fff;
	border-left: 10px solid transparent;
	border-right: 10px solid transparent;
	right: 300px;
	top: -10px;
}
.room-guests-content {
	padding-top: 23px;
	padding-left: 15px;
}
.click_hidden_text {
	position: absolute;
	z-index: 1;
	left: 163px;
	top: 56px;
	opacity: 0.8;
}
.form-search {
	padding: 0;
	margin: 10px 10px 5px 10px;
	
}
.form-item {
	padding: 10px 5px;
	clear: both;
	height: 14px;
}
.edit-rooms {
	font-weight: normal;
	font-size: 13px;
	float: left;
	color: #000;
	margin-right: 5px;
}
.rooms-guests-plus, #add-room {
	float: right;
	color: #fff;
	background:#ccc;
	width: 24px;
	height: 24px;
	text-align: center;
	line-height: 24px;
	top: -6px;
	position: relative;
	font-size: 18px;
	cursor: pointer;
}
.form-text {
	text-align: center;
	width: 6%;
	width: 20px !important;
	text-decoration: center;
	float: right;
	border:0;
	padding: 0;
	height: auto;
	outline: 0;
	vertical-align: middle;
}
.textfield label {
	margin-right: 2.5px;
	display: inline;
	font-size: 13px;
}
.children-1 label {
	display: inline;
	font-size: 13px;
}
.rooms-guests-minus, #remove-room {
	float: right;
	color: #fff;
	background:#e7e7e7;
	width: 24px;
	height: 24px;
	text-align: center;
	line-height: 24px;
	top: -6px;
	position: relative;
	font-size: 18px;
	cursor:auto;
}
.adults-children {
	clear: both;
}
.rooms-id {
	line-height: 40px;
	float: left;
	padding:5px 0 0 15px;
	color: #000;
}
.already-min {
	float: right;
	margin: -16px 0px 2px 6px;
	padding: 0;
	background: #fff;
}
.already-min-search {
	float: right;
	margin: 5px 10px 5px 2px;
}
.adults-children-wrapper {
	clear: both;
}
.children-1 {
	padding: 10px 5px;
	clear: both;
	height: 14px;
}
.edit-children {
	font-weight: normal;
	font-size: 13px;
	float: left;
	color: #000;
	margin-right: 5px;
}
.textfield {
	clear: both;
	height: 14px;
	margin: 0;
	position: relative;
	margin-top: 32px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="room-guests-count">
    <div class="room-guests-content">
      Adult
      <span>2</span>
      , Child 
      <span>0</span>
    </div>
</div>
<div class="form-open">
  <div class="form-search">
    <div class="form-item">
      <label class="edit-rooms">Amount of number</label>
      <div id="add-room">+</div>
      <input class="form-text" value="1">
      <div id="remove-room">-</div>
    </div>
  </div>
  <div class="adults-children">
    <div class="adults-children-wrapper">
      <div class="rooms-id">Number <span class="room-count">1</span>:</div>
      <div class="already-min-search">
        <div class="children-1">
          <label for="edit-children">Child</label>
          <div class="rooms-guests-plus">+</div>
          <input type="text" value="0" class="form-text">
          <div class="rooms-guests-minus">-</div>
        </div>
      </div>
      <div class="already-min">
        <div class="textfield">
          <label for="edit">Adult</label>
          <div class="rooms-guests-plus">+</div>
          <input type="text" value="0"  class="form-text">
          <div class="rooms-guests-minus">-</div>
        </div>
      </div>
    </div>
  </div>
</div>

我写了if阻止addSection function循环遍历所有元素(类.rooms-child-plus)它有效,但循环显示错误Can not read property 'addEventListener' of undefined.

if (adultsChildren.appendChild(wrapper)) {
    for(let i = 0;i < 4;i++){
      var roomsChildPlus = document.querySelectorAll(".rooms-child-plus");
      roomsChildPlus[i].addEventListener("click", function(){
        alert("hi");
      })
    }  
  }

问题是为什么会输出这样的错误并且在我正确的路径上?以及如何获取所有元素querySelectorAll然后使用addEventListener作为数组也以同样的方式


你应该循环你的roomsChildPlus而不是硬编码长度 4。

var roomsChildPlus = document.querySelectorAll(".rooms-child-plus");

for(let j=0; j<roomsChildPlus.length; j++){
    roomsChildPlus[j].addEventListener("click", function(){
        alert("hi");
    });
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 querySelectorAll 获取所有元素并与 addEventListener 一起使用 的相关文章

随机推荐

  • cordova-plugin-fcm - FCMPlugin 未定义

    我正在使用 Ionic 2 并试图让推送通知正常工作 我已向 Firebase 注册了我的应用程序 并且可以成功向其推送通知 我现在需要进行设置 以便我可以从我的应用程序推送通知 所以我决定使用以下 Cordova 插件 cordova 插
  • 如何为默认 opencart 联系我们表单创建带有附加字段的副本

    在我的 opencart 模板中 我需要创建一个类似于联系表单的表单 其中包含姓名 电子邮件和手机号码字段 我已经在联系我们页面中使用了默认的联系我们表单 我需要为另一个表单创建这个新表单page 有没有免费的扩展可用 否则我们如何实现自己
  • 如何调整 PdfPTable 的大小以适合页面?

    我正在生成一个文档 如下面的代码所示 当然表的内容不同 但表的内容是不同的 我需要做的是确保该表的大小永远不会超过一页 无论单元格中的内容量如何 有办法做到吗 import com itextpdf text Phrase import c
  • 分割字符串并返回字符串数组

    I want split str能够采取 例如 bob is great 并返回 bob is great 更确切地说 foo split str bob is great 分配 bob is great in foo 从而成为一个由 3
  • 提取字符串的一部分

    我需要提取字符串的一部分 例如 01 nbsp nbsp nbsp Artist Name Song Title 所以我在开头有计数器 点和分隔符可以是任何东西 目前分隔符是 var separator nbsp nbsp nbsp 我想提
  • 即使在 android 9.0 (pie) 中启用了夜间模式,如何在我的应用程序中禁用夜间模式?

    我在 android 派发布之前创建了我的应用程序 在我放置的每个布局中android background white 它在每个设备上都能正常工作 但是当我的兄弟安装该应用程序并启用时night mode我的应用程序只需一个动作就变成了一
  • 自定义排序排序

    NET C 有没有办法对 a 进行排序List
  • Django i18n_patterns:resolve() 无法按预期工作

    解决这个问题后here 还有另外一个 如果你在这里使用翻译url系统https docs djangoproject com en 1 8 topics i18n translation 你会看到你添加了类似的模式urlpatterns i
  • 如何像 Instagram 一样在圆形图像视图周围设置边框?

    我想在圆形图像视图周围设置一个圆形边框 就像 Instagram 故事一样 有人可以帮忙吗 这是我的图像视图
  • 将命令添加到 Tkinter OptionMenu?

    我正在用 Python 2 7 8 编写一些代码 其中包括OptionMenu小部件 我想创建一个OptionMenu当选项更改时调用函数 但我也希望在列表中找到可能的选项 作为我的最终选项OptionMenu会有很多选择 我使用以下代码创
  • 在 postgres 中,使用表达式 array[] 与使用带有 {} 的数组的字符串表示形式有什么区别吗?

    使用两种不同的语法引用或创建数组有什么区别 array 1 2 3 vs 1 2 3 使用两者有什么好处吗 The ARRAY is the 表达与值构造函数 这 是字符串文字 constant 处理过程略有不同 但对于几乎用例来说 没有任
  • Launch4j / Windres:如何正确设置路径?

    我为我的项目配置了 launch4j 当我在 windowsXP 上开发时 我又使用了它 它在那里工作 现在我也需要它在 mac 上构建 我的build xml
  • 在 Mootools 中解析 XML

    似乎没有任何关于在 Mootools 中解析 XML 的有用文档 要么它太简单了 没有人愿意提及它 要么它太难了 每个人都放弃了尝试 有没有人有任何简单的跨浏览器方法来使用 Mootools 解析 XML 这是我的小 XML 文件 data
  • 将一个数据帧拆分为多个数据帧

    我有一个数据框 需要根据正则表达式搜索将其拆分为多个数据框 搜索没有固定的模式 即有时只有一个正则表达式 有时是多个正则表达式的组合 这是一个仅提取一组行的最小示例 Name lt c John Jane Arthur Maggie Age
  • 使用 Azure Active Directory 对用户进行身份验证后执行代码

    我使用 VS2015 创建了一个 ASP NET MVC Core 1 1 0 应用程序 在对话框中 我选择了连接到 Azure AD 的选项 因此 VS 生成了样板代码 并且正如预期的那样 应用程序将我重定向到 Microsoft 的登录
  • 插入一个元素

    Javascript中是否有一种方法可以在当前节点之后插入一个元素 我知道有一种方法可以在XML的当前节点之前插入一个元素 但是有没有一种方法可以在当前节点之后插入一个元素 在当前节点之后 只需获取当前节点的下一个兄弟节点并在该节点之前插入
  • 对单表使用 Merge 语句

    是否可以对单表使用merge语句 我想在插入之前检查是否已存在相同的值集 则应更新该记录 如果不存在 则应插入该记录 我在互联网上搜索过 但我得到了带有 2 个表的合并语句的示例 我在一张桌子上尝试过 但无法获得积极的结果 我试图检查的值将
  • Realm 数据库中的搜索操作速度

    这是我的模型RealmObject class public class ARDatabase extends RealmObject PrimaryKey private String uid private String namex p
  • 未捕获的类型错误:无法调用未定义的方法“hasChildNodes”

    我正在尝试使用 jquery 中的 ajax 请求读取 XML 下面是代码 它在 IE 中工作正常 但是当我在 Chrome 上运行它时 我遇到了这个错误 未捕获的类型错误 无法调用未定义的方法 hasChildNodes ajax typ
  • 如何从 querySelectorAll 获取所有元素并与 addEventListener 一起使用

    我有一个块 当我单击加号时 会创建 4 个子块 当我单击任何子块加号按钮时 我必须添加 rooms guests plus类 它们增加自0 to 5当单击减号按钮时 rooms guests minus类 以同样的方式减少 const ro