2

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

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

<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 中很久之前就获得了哈希值。

如何解决?

谢谢。

4

3 回答 3

4

事件处理程序在默认操作之前运行。缺少涉及setTimeout您的讨厌技巧,您无法在功能完成之前获得要遵循的链接。

this.href改为阅读。

也就是说,听起来您正在使用任意片段标识符而不是 URI 来处理明智的事情。如果是这样:我会修复 href,使其指向加载图像的真实 URL。建立在有效的东西上

于 2010-08-19T20:14:42.420 回答
2

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

  • jQuery 点击处理程序
  • 点击处理程序
  • 本机/默认行为(调用链接,将其写入 window.location)

我建议您this.href改用。也使用e.preventDefault()这样浏览器不执行本机/默认行为。

于 2010-08-19T20:16:13.773 回答
0

由于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);  
});  
于 2010-08-19T20:16:20.890 回答