![](/img/trans.png)
[英]Make Event by addEventListener When Click On Image does not work
[英]addEventListener does not work on click event…
我想用addEventListener
处理一个带有id="ticker"
的点击事件。 点击作品。
document.getElementById("ticker").onclick = function() {
timeChange(5);
}
但我不明白,为什么它不能与addEventListener
这是我写的:
document.getElementById("ticker").addEventListener("click", timeChange, false);
这是我要调用的函数timeChange
:
const display = document.getElementById("counter");
function timeChange(seconds) {
let seconds = 5;
display.innerText = seconds; // seconds + 1; ??
// page.secondChild.nodeValue = seconds;
seconds -= 1;
if (seconds > -1) {
setTimeout(timeChange, 1000, seconds);
}
}
在相关问题中,我阅读了一些关于闭包的内容。 但是我在“我的” addEventListener
中看不到与关闭主题相关的问题。
这是 HTML:
但在此之前是触发事件的按钮<button id="ticker">
。 (在 HTML 末尾)
<body>
<div id="page">
<div id="counter">5</div>
<div id="btn"><button id="ticker">Start Pomodoro</button></div>
</div>
<div id="otput">
<p>This is your</p>
<p id="sessions"></p>
<p>session</p>
</div>
<div id="page1">
<div id="counter1">5</div>
<div id="btn1"><button id="ticker">Start Pomodoro</button></div>
</div>
</body>
首先,由于您没有将参数传递给timeChange
,因此该函数不应将seconds
声明为一。
接下来,您需要在回调函数之外声明seconds
变量,以便在被该函数更改后可以保留其值。
最后,您有两个具有相同id
按钮。 id
在文档中必须是唯一的。
document.getElementById("ticker").addEventListener("click", timeChange); let display = document.getElementById("counter"); let seconds = 5; function timeChange() { display.textContent = seconds; seconds -= 1; if (seconds > -1) { setTimeout(timeChange, 1000, seconds); } }
<div id="page"> <div id="counter">5</div> <div id="btn"><button id="ticker">Start Pomodoro</button></div> </div>
如果您确实想将参数传递给timeChange
,那么您必须将您的回调引用包装在另一个将实际成为回调的函数中。
// Here, the callback is the anonymous function document.getElementById("ticker").addEventListener("click", function() { timeChange(5); // which will then invoke the actual function with an argument }); let display = document.getElementById("counter"); let seconds = null; function timeChange(sec) { seconds = sec; // Need to update the higher scoped variable display.textContent = seconds; seconds -= 1; if (seconds > -1) { setTimeout(timeChange, 1000, seconds); } }
<div id="page"> <div id="counter">5</div> <div id="btn"><button id="ticker">Start Pomodoro</button></div> </div>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.