jQuery“window.location.hash” - 获取哈希太晚了?

发布于 2024-09-15 08:14:43 字数 736 浏览 10 评论 0原文

我正在编写一些脚本,但它存在严重的哈希问题。

我有一个链接图像列表,例如:

<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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

迷离° 2024-09-22 08:14:43

事件处理程序在默认操作之前运行。如果没有涉及 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.

想念有你 2024-09-22 08:14:43

当您单击链接时,代码将按以下顺序执行:

  • jQuery click-handlers
  • onclick-handlers
  • 本机/默认行为(调用链接,将其写入 window.location)

我建议您使用 this.href 相反。还可以使用e.preventDefault(),这样浏览器就不会执行本机/默认行为。

When you click the link, code will be executed in the following order:

  • jQuery click-handlers
  • onclick-handlers
  • native/default behavior (calling the link, writing it to window.location)

I would recommend that you use this.href instead. Also use e.preventDefault() so the native/default behavior isn't performed by the browser.

薄情伤 2024-09-22 08:14:43

由于更改 location.hash 的默认事件尚未发生,因此您可以获取 .hash 直接从锚点开始,如下所示:

$("a img").click(function() {  
  var hash = this.parentNode.hash;
  $("#displayFile").load('files/'+ hash +'.html').fadeIn(300);  
});  

不过,由于图像是唯一的东西,您可以将处理程序附加到 < a> 本身,如下所示:

$("a").click(function() { 
  $("#displayFile").load('files/'+ this.hash +'.html').fadeIn(300);  
});  

Since the default event changing the location.hash hasn't happened yet, you can fetch the .hash from the anchor directly instead, like this:

$("a img").click(function() {  
  var hash = this.parentNode.hash;
  $("#displayFile").load('files/'+ hash +'.html').fadeIn(300);  
});  

Though, since the image is the only thing, you can attach the handler to the <a> itself, like this:

$("a").click(function() { 
  $("#displayFile").load('files/'+ this.hash +'.html').fadeIn(300);  
});  
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文