我在这里有一些循环,在代码下解释。
$(document).ready(function(){
var newHash = "";
$('a').click(function(event) {
var id = $(this).attr('href');
alert(id);
//Do something with selector with id that is clicked
window.location.hash = $(this).attr("href");
event.preventDefault();
});
$(window).bind('hashchange', function(){
newHash = window.location.hash.substring(1);
if (newHash) {
$("ul li." + newHash + " a").trigger("click");
};
});
$(window).trigger('hashchange');
})
<ul>
<li class="first"><a href="#first">first</a></li>
<li><a href="#second">second</a></li>
<li><a href="#third">third</a></li>
</ul>
我正在使用Ben Alman的ba-hashchange插件 这是实例 - &gt; EXTERNAL LINK ON MY SERVER
请注意,当您点击“#first”时,您会收到2条提醒 但粘贴链接时更改了哈希 - &gt; CHANGED HASH 你只收到一个警报。
它就像一个循环,当你点击链接时,你会看到来自更改URL的点击和新哈希警报。 所以你有2个警报。
我只想提醒一次。 在这种情况下。你粘贴它的触发链接,这个链接应该来自哈希名称并且你有1个警报。 当你点击链接时,它改变了哈希,但没有触发它改变这个哈希值。
答案 0 :(得分:0)
您收到两个警报,因为在没有哈希的情况下加载页面时,您实际上两次点击了“第一个”链接。这就是发生的事情:
$(window).trigger('hashchange')
,但是因为没有newHash值,所以没有任何反应alert()
(第一次警报!)然后更改哈希值当您使用预设哈希加载页面时,会发生类似的事件集:
alert()
,但您的散列保持不变,因此不会调用您的散列更改处理程序。因此,在这种情况下,您只会收到1个警报。目前还不完全清楚你要完成什么...因为如果你只是想操纵哈希的值,你可以从hashchange处理程序这样做 - 为什么你的hashchange处理程序会点击你的链接?同样,如果你只是想操纵一些绑定到链接的属性,你可以在点击处理程序中这样做 - 你为什么要把它粘在哈希中呢?
答案 1 :(得分:0)
问题毫无意义,现在已经解决了。在这种情况下,我只需要。
$(document).ready(function(){
var newHash = "";
$('a').click(function(event) {
//Do something with selector with id that is clicked
window.location.hash = $(this).attr("href");
event.preventDefault();
});
$(window).bind('hashchange', function(){
newHash = window.location.hash.substring(1);
if (newHash) {
alert(newHash);
};
});
$(window).trigger('hashchange');
})
这是微不足道的因为我的问题很复杂,但我需要睡觉才能理解