loops - addEventListener 不会触发
问题描述
我已经在 i-net 上搜索了 2 天,但仍然找不到解决我的问题的方法,所以我想问你。
背景:我有一个带有列表项的无序列表,每个 li 都有一个 ::after 元素。我想在单击 ::after 元素时向 li 添加一个类。
这是重要的代码:
/* jslint browser: true */
/*global window */
window.onload = function() {
//Possible Solution - 1st Try
var lit = document.getElementById("li1");
function showMe(){
this.classList.add("in-view");
console.log(this.className);
}
document.getElementById("li1").addEventListener("click", showMe.bind(this,lit),false);
// Possible Solution - 2nd Try
var liitems = document.getElementsByClassName("liitems");
function pullTextOnClick() {
liitems[i].classList.add("in-view");
}
for (var i=0; i<liitems.length; i++) {
liitems[i].addEventListener("click",pullTextOnClick, false);
}
};
.timeline ul li {
list-style-type:none;
position:relative;
width:6px;
margin:0 auto;
padding-top:50px;
background:#fff;
}
.timeline ul li::after{
content:'';
position:absolute;
left:50%;
bottom:0;
transform: translateX(-50%);
width:50px;
height:50px;
border-radius:50%;
background: inherit;
cursor:pointer;
}
<div class="container">
<section class="timeline" id="timelineexpand">
<ul>
<li class="liitems" id="li1" onclick="showMe()">
<div>
<time>1992</time>
Sth happend
</div>
</li>
<li class="liitems" id="li2">
<div>
<time>1997</time>
Sth else
</div>
</li>
我如何理解我的问题以及我在 Internet 上发现的内容: addEventListener 打开带有对象引用的第二个参数 (eventHandler)。也就是说,当我使用控制台记录它时,通常是“窗口”或“未定义”。所以我必须以某种方式告诉函数(showMe 或 pullTextOnClick)“this”是什么或使用哪个 li 元素。
如果 eventListener 在 for 循环中并不断检查是否单击了 li-Node,我会更喜欢它。如果发生这种情况,应该将 li 元素的索引转发给函数,然后添加“in-view”类。
问题:函数 showMe/pullTextOnClick 没有触发。如果我在这些函数中添加一个 console.log,它们不会记录任何内容。这是为什么?
所以我希望有人能解释我为什么我的代码不起作用或如何改进它。谢谢!
我的问题摘要:
为什么“/全局窗口/做任何事情,什么?它在评论中,但如果我不添加它,它会说“window.onload”没有定义。
如何将 eventTarget (li-element) 绑定到 eventHandler-fct (showMe, pullTextOnClick)?
“绑定”-fct 是如何工作的?我阅读了很多解释,但仍然不明白为什么我的代码不起作用。
我试图用“addClass”添加一个类,但它说 fct 没有定义。它只适用于 classList.add.,但为什么呢?
解决方案
问题解决了:
我试图点击 li 元素。但是当我尝试这样做时,选择了父容器。原因是,因为 li 元素的 z-index 为 -1。我这样做是为了将其隐藏在另一张图片后面。学过的知识。
推荐阅读
- algorithm - 陈的画线算法中采样点的位置是如何确定的?
- android - 将 minSdkVersion 从 16 更改为 26 将发布 APK 大小从 17 MB 增加到 39 MB
- azure - 关于自动化 Azure 安全中心自动预配的问题 - 扩展
- pine-script - PineScript 中 Thinkscript 的 GetValue()
- asp.net-core - 当一个控制器类不应该有 [ApiController] 属性?
- reactjs - 动态 React 组件渲染不会随着 map() 的每次新迭代而改变
- matplotlib - matplotlib 标签中的下标*不是斜体*?
- ruby - 安装 gem 后 VSCode 找不到 Ruby Gems - “运行 `gem install solargraph` 或更新您的 Gemfile。”
- html5-canvas - 如何将 p5.JS 画布创建代码转换为 HTML 画布
- django - 无法在视图中编辑 django 表单 empty_form 的字段