Javascript jQuery";window.location.hash";-太晚了?
我正在编写一些脚本,但它有一个严重的哈希问题 我有一个链接图像列表,如:Javascript jQuery";window.location.hash";-太晚了?,javascript,jquery,fragment-identifier,hashchange,browser-state,Javascript,Jquery,Fragment Identifier,Hashchange,Browser State,我正在编写一些脚本,但它有一个严重的哈希问题 我有一个链接图像列表,如: <a href="#1"><img src="1.jpg" /></a> <a href="#1"><img src="2.jpg" /></a> <a href="#1"><img src="3.jpg" /></a> 因此,当我单击图像时,它应该向url添加哈希(href=“#1”),将正确的文件加载到#dis
<a href="#1"><img src="1.jpg" /></a>
<a href="#1"><img src="2.jpg" /></a>
<a href="#1"><img src="3.jpg" /></a>
因此,当我单击图像时,它应该向url添加哈希(href=“#1”),将正确的文件加载到#displayFile div并淡入
但实际上,当我单击图像时,它会显示空的#displayFile div,在我使用相同的哈希刷新站点后,它会加载内容。我相信这个脚本早在它进入URL之前就得到了散列
如何修复它
谢谢。事件处理程序在默认操作之前运行。除了涉及
setTimeout
的肮脏把戏之外,在函数完成之前,您无法获得要遵循的链接
改为阅读this.href
这就是说,听起来您使用的是任意片段标识符,而不是URI。如果是这样:我会修复href,使其指向加载图像的真实URL 单击链接时,代码将按以下顺序执行:
- jQuery单击处理程序
- onclick处理程序
- 本机/默认行为(调用链接,将其写入window.location)
我建议您改用
this.href
。还可以使用e.preventDefault()
,这样浏览器就不会执行本机/默认行为。由于更改位置的默认事件尚未发生。散列
,您可以直接从锚点获取,如下所示:
$("a img").click(function() {
var hash = this.parentNode.hash;
$("#displayFile").load('files/'+ hash +'.html').fadeIn(300);
});
$("a").click(function() {
$("#displayFile").load('files/'+ this.hash +'.html').fadeIn(300);
});
但是,由于图像是唯一的对象,因此可以将处理程序附加到
本身,如下所示:
$("a img").click(function() {
var hash = this.parentNode.hash;
$("#displayFile").load('files/'+ hash +'.html').fadeIn(300);
});
$("a").click(function() {
$("#displayFile").load('files/'+ this.hash +'.html').fadeIn(300);
});