Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery";window.location.hash";-太晚了?_Javascript_Jquery_Fragment Identifier_Hashchange_Browser State - Fatal编程技术网

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);  
});