javascript - 让 Javascript 中只存在同一个函数的一个实例
问题描述
我li
在 a 中的项目上有这个 onclick 事件侦听ul
器,它启动一个 setInterval 函数,问题是如果我单击第二个li
项目,则相同间隔函数的另一个实例启动并且前一个实例继续运行。我怎样才能“删除”前一个,只让最后一个“存在”?
我为类似问题找到的解决方案对我不起作用。
这是代码:
document.addEventListener('click', function (event) {
var texta = document.getElementById('myTextarea');
var item = event.target.closest('#yourlists li');
if (item) {
var ite = event.target.closest('#yourlists li').innerHTML;
setInterval(function autoSave(){
var listText = texta.value.split('\n');
localStorage.setItem(ite, JSON.stringify(listText));
}, 5000);
}
});
解决方案
setInterval()
返回一个 ID,您可以稍后使用它来停止它...
var intervalId = 0;
document.addEventListener('click', function (event) {
var texta = document.getElementById('myTextarea');
var item = event.target.closest('#yourlists li');
if (item) {
var ite = event.target.closest('#yourlists li').innerHTML;
// clear any existing interval handler
clearInterval(intervalId);
// create a new one
intervalId = setInterval(function autoSave(){
var listText = texta.value.split('\n');
localStorage.setItem(ite, JSON.stringify(listText));
}, 5000);
}
});
推荐阅读
- odbc - (也许)ODBC SQL Server 连接字符串中的非法字符 PWD=
- jquery - 无法从 Ajax 获取 HTML 或将响应附加到 DIV - JQuery
- python - 写入时间等于文件文本中的行数
- python - 如何在 0 到 59 之间的时间类中设置分钟属性
- java - 从每条路径与初始点相距一定距离的点绘制路径
- sql-server - OVER (PARTITION BY [index]) 是否有助于加快查询速度?
- arrays - 将文本数组插入最后一行
- node.js - Nodejs和Hbase发送到客户端后无法设置标头
- c++ - C++17 元组解包
- ajax - 为什么我的 Ajax 发布的数据格式不正确?