javascript - 使用 Javascript 单击按钮在生成的列表中创建多个时钟
问题描述
我希望用户从下拉列表中选择所需的时区,单击添加并显示时间。很容易。但我也希望用户能够为其他时区添加额外的时钟。我遇到了两个相互矛盾的问题:
- 我可以将时钟添加到列表中,但它们不会随着 setInterval 前进,因为我需要使列表中的 id 唯一,这会产生错误。
- 如果我消除了唯一的 id 变量(unique++),那么时钟可以工作,但是每次创建一个新时钟时,它们都会相互覆盖,因为它们的 id 不是唯一的。
下面的代码和jsfiddle:
var t;
var nd;
var uniqueID = 0;
// add timezone clock and add 1 to uniqueID counter
document.addEventListener('DOMContentLoaded', function() {
document.getElementById('addTimeZone').addEventListener('click', getSelectTime);
document.getElementById('addTimeZone').addEventListener('click', addUniqueID);
});
//add 1 to uniqueID everytime the 'Add' button is clicked
function addUniqueID() {
uniqueID++;
}
function getSelectTime() {
//create space for new list item
document.getElementById("addedClock").style.display = "block";
//get timezone offset from dropdown
var t = document.getElementById("timezone").value;
//build new list item
var list = document.getElementById('newClocks');
var entry = document.createElement('li');
list.appendChild(entry);
//add div to list to display time and add unique id
var divValue = document.createElement("div");
divValue.id = 'resultTZValue' + uniqueID;
entry.appendChild(divValue);
//run clock function, pass the timezone offset and uniqueID
tzClock(t , uniqueID);
setInterval(() => {tzClock(t , uniqueID); }, 1000);
}
function tzClock(t , uniqueID) {
var d = new Date();
utc = d.getTime() + (d.getTimezoneOffset() * 60000);
nd = new Date(utc + (3600000 * t)).toLocaleTimeString();
//plug this new time data into list item
document.getElementById("resultTZValue" + uniqueID).innerHTML = nd ;
}
<html>
<head>
<title>Good Times</title>
<style>
li {list-style-type: none;}
</style>
</head>
<body>
<div id="addedClock" class="infoContainer" style="display:none">
<ol id="newClocks"></ol>
</div>
<div class="addTimeZone">
<div class="dropDown">
<form>
<label for="timezone">Add Additional Timezone:</label>
<select name="timezone" id="timezone">
<option value="">Choose</option>
<option value="0" >Universal Coordinated Time</option>
<option value="-5">Eastern Standard</option>
<option value="-6">Central Standard</option>
<option value="-7">Mountain Standard</option>
<option value="-8">Pacific Standard</option>
</select>
</form>
</div>
<div class="addBtn">
<button id='addTimeZone'>Add</button>
</div>
</div>
<script src="test.js"></script>
</body>
</html>
解决方案
推荐阅读
- c# - OmniSharp 扩展无法在 Arch VScode 上加载
- ios - 在后台运行应用程序的最佳方式是什么
- javascript - 我怎样才能让我的所有值都显示在我的桌子上?
- android - 二进制 XML 文件第 24 行:在 Vivo 设备中膨胀类 ImageView 时出错
- amazon-web-services - 在最新的 AWS 实例创建中指定的 PEM 文件/密钥在哪里/何时?
- php - 致命错误:无法在 php wordpress 的写入上下文中使用函数返回值
- postgresql - 在 Postgres 触发器中访问事务上下文
- python - Bs4 仅获取部分 html 标签集
- android-studio - 我们可以在 Flutter / dart 的帮助下创建 windows(pc) 应用程序吗?
- javascript - 试图了解在访问私有 API 时我应该如何使用代理