javascript - javascript 每个带有 addEventListener 的切换类
问题描述
有一个javascript处理程序;当您单击时,会弹出一个联系表单以发送电子邮件。一切正常,但对第一张卡,在第二张卡上不起作用。
我已经尝试过forEach,但仍然有些混乱
这是预期的结果和我当前的代码:https ://codepen.io/shkasjon/pen/JjYmgyP
( function( $ ) {
"use strict";
//let elementsArray = document.querySelectorAll(".as_profile_widget");
let asBody = $(".as-body-wrap").height();
const cta = document.querySelector('.as-header');
const footer = document.querySelector('.as-toaster');
const arrowIcon = document.querySelector('.arrow-down-close');
function setHeight() {
let asHeight = 0;
//let asBody = $(".as-body-wrap");
asHeight = asBody;
}
setHeight();
$(window).resize(setHeight);
function toggleFooter() {
footer.classList.toggle('is-open');
arrowIcon.classList.toggle('open');
(footer.classList.contains('is-open') ?
$('.as-toaster.is-open').css('margin-top', -asBody) :
$(footer).css('margin-top', '')
);
}
//elementsArray.forEach(function(cta) { });
cta.addEventListener('click', toggleFooter);
}( jQuery ) );
解决方案
在我看来,您在当前代码中对元素进行了循环,并在.as_profile_widget
该元素中查找.as-header
和其他内容,并且将始终相同cta
footer
arrowIcons
您可以通过querySelector
在元素本身上使用来做到这一点
(function( $ ) {
"use strict";
let elementsArray = document.querySelectorAll(".as_profile_widget");
function process(element) {
const cta = element.querySelector('.as-header');
const footer = element.querySelector('.as-toaster');
const arrowIcon = element.querySelector('.arrow-down-close');
// Add event listener and other stuff here
}
elementsArray.forEach(process)
})
有了这个cta
和其他将被限制在你的元素(卡)
(代码中可能有错误,还远未完成,但您应该可以从这里开始工作)
注意:正如其中一条评论指出的那样,使用 Jquery 和本机方法混合这样是不稳定的
推荐阅读
- c# - NLog.Web.AspNetCore 不再记录到数据库
- node.js - 即使在 Angular 7 中使用编译器选项作为目标 es6 和 es2017,如何修复编译时错误?
- c# - 从单个数据表 c# 填充嵌套的类列表
- javascript - 单击项目名称时打开/关闭子菜单
- python-3.x - 对字典进行排序
- c# - 将信息数组从角度传递给接收模型对象的asp网络控制器
- oracle - 如何跨多个模式从表中删除分区?
- bash - 批量重命名图像文件但保持扩展名相同 linux
- symfony - 在网站上进行即时通讯的最佳方式是什么?
- bash - 无法使用 shell 命令删除重复的字符串