jQuery“window.location.hash” - 获取哈希太晚了?
我正在编写一些脚本,但它存在严重的哈希问题。
我有一个链接图像列表,例如:
<a href="#1"><img src="1.jpg" /></a>
<a href="#1"><img src="2.jpg" /></a>
<a href="#1"><img src="3.jpg" /></a>
我想做的就是在单击第一个图像后加载文件 files/#1.html,在第二个图像后加载 files/#2.html 等。
这是我的 jQuery 函数:
$("a img").click(
function()
{
var hash = window.location.hash;
$("#displayFile").load('files/'+ hash +'.html');
$("#displayFile ").fadeIn(300);
});
所以当我单击图像,它应该向 url 添加哈希值(href="#1"),将正确的文件加载到 #displayFile div 并将其淡入。
但实际上,当我单击图像时,它显示空的 #displayFile div,在刷新后站点具有与加载内容相同的哈希值。我相信脚本早在 URL 中之前就已经获取了哈希值。
如何修复它?
谢谢。
I'm working on some script but it have a serious problem with hashes.
I have a list of link-images like:
<a href="#1"><img src="1.jpg" /></a>
<a href="#1"><img src="2.jpg" /></a>
<a href="#1"><img src="3.jpg" /></a>
All I want to do is to load file files/#1.html after clicking the first image, files/#2.html after the second etc.
Here's my jQuery function:
$("a img").click(
function()
{
var hash = window.location.hash;
$("#displayFile").load('files/'+ hash +'.html');
$("#displayFile ").fadeIn(300);
});
So when I click a image it should add hash to the url (href="#1"), load the right file to #displayFile div and fade it in.
But actually when I click the image it shows empty #displayFile div and after i refresh the site with the same hash it loads the content. I believe the script gets the hash long before it's in URL.
How to fix it?
Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
事件处理程序在默认操作之前运行。如果没有涉及
setTimeout
的令人讨厌的技巧,您将无法在函数完成之前获取要跟踪的链接。请阅读
this.href
。也就是说,听起来您正在使用任意片段标识符而不是 URI 来处理有意义的事情。如果是这样:我会修复 href,使其指向加载图像的真实 URL。 建立在有效的基础上。
Event handlers run before default actions. Short of nasty tricks involving
setTimeout
you can't get the link to be followed before the function completes.Read
this.href
instead.That said, it sounds like you are using arbitrary fragment identifiers instead of URIs to sensible things. If so: I'd fix up the href so it points to a real URL that loads the image. Build on things that work.
当您单击链接时,代码将按以下顺序执行:
我建议您使用
this.href
相反。还可以使用e.preventDefault()
,这样浏览器就不会执行本机/默认行为。When you click the link, code will be executed in the following order:
I would recommend that you use
this.href
instead. Also usee.preventDefault()
so the native/default behavior isn't performed by the browser.由于更改
location.hash
的默认事件尚未发生,因此您可以获取.hash
直接从锚点开始,如下所示:不过,由于图像是唯一的东西,您可以将处理程序附加到
< a>
本身,如下所示:Since the default event changing the
location.hash
hasn't happened yet, you can fetch the.hash
from the anchor directly instead, like this:Though, since the image is the only thing, you can attach the handler to the
<a>
itself, like this: