javascript - 为什么在 hashchange 事件侦听器中重复输出?
问题描述
我用#2019-01 #2019-02 等的哈希生成了一年中的月份。每次我点击一个链接时,它都会附加另一个月份列表。
它应该只显示月份链接的一份副本,但输出更新的哈希值。所以如果我点击二月它应该输出#2019-02。
https://jsfiddle.net/captlid/gkhe4naz/3/
var date = new Date();
location.hash = date.getFullYear();
var p = document.querySelector('p');
p.innerHTML = location.hash;
window.addEventListener('hashchange', function() {
for (dz = 0; dz < 12; dz++) {
p.innerHTML += '<a href="'+location.hash+'-'+String("0"+(dz+1)).slice(-2)+'">'+ months[dz] +'</a> ';
}
p.innerHTML += location.hash;
});
解决方案
您的代码在编写时工作正常。我认为您不小心将日历输出代码包含在 hashchange 函数中。如果将其移到外面,它应该可以按预期工作。此外,您正在p
元素而不是calendar
元素内部构建日历。下面的代码显示了一个正常运行的版本
var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
var calendar = document.querySelector('#calendar');
var date = new Date();
location.hash = date.getFullYear();
var p = document.querySelector('p');
p.innerHTML = location.hash;
for (dz = 0; dz < 12; dz++) {
calendar.innerHTML += '<a href="' + location.hash + '-' + String("0" + (dz + 1)).slice(-2) + '">' + months[dz] + '</a> ';
}
window.addEventListener('hashchange', function() {
p.innerHTML = location.hash;
});
<div id="calendar"></div>
<p></p>
推荐阅读
- php - 我怎样才能使这个 SELECT-INSERT 准备好的用户注册语句起作用?
- python - __str__ 返回非字符串(潜在客户类型)
- javascript - 如何确保 AMQP 消息不会丢失,以防 rhea 订阅者出错?
- php - 根据自定义“woocommerce_variation_option”将复选框添加到 WooCommerce 结帐页面
- python - Pandas:替换字符串列值(等于、包含、大小写)
- java - Spring JPA没有从数据库中获取最新记录
- mongodb - OpenBSD 6.6 上的 scons 中的编译器版本没有变化
- php - 使用日期时间对象 symfony php 编码/解码 Json
- c# - blazor 可以使用自定义属性更改回调事件吗?
- c# - 如果对象成员没有值,如何为对象分配 null - automapper c#