0

我在这里有某种循环,代码下的解释。

        $(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 插件 这是现场示例 ->我的服务器上的外部链接

请注意,当您单击“#first”时,您会收到 2 个警报,但是当粘贴更改哈希的链接时 -> CHANGED HASH 您只会收到一个警报。

它就像一个循环,当您单击链接时,您会从单击中获得警报,并从更改 URL 触发新哈希。因此,您收到了 2 个警报。

我只想要 1 个警报。在这种情况下。您粘贴链接其触发器链接,该链接假定来自哈希名称,您收到 1 个警报。当您单击链接时,它会更改哈希,但不会触发它更改此哈希。

4

2 回答 2

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

这是微不足道的,因为我的问题很复杂,但我需要和它一起睡觉才能理解

于 2013-05-30T12:24:11.460 回答
0

您收到两个警报,因为当您加载没有哈希的页面时,您实际上是两次单击“第一个”链接。这是正在发生的事情:

  1. 访问您的网站
  2. 调用您的 'hashchange' 处理程序(因为出于某种原因您调用$(window).trigger('hashchange'),但是因为没有 newHash 值,所以没有任何反应
  3. 点击“第一”
  4. 调用您的单击处理程序,您调用alert()(第一个警报!)然后更改哈希
  5. 因为哈希是从您的单击处理程序中更改的,所以您的“hashchange”处理程序被调用,现在因为 newHash 具有有效值,您的处理程序再次(以编程方式)单击链接,您会收到第二个警报。

当您使用预设哈希加载页面时,会发生一组类似的事件:

  1. 使用哈希集访问您的网站
  2. 您的 'hashchange' 处理程序被调用,但与以前不同的是,现在有一个非空的 newHash 值,因此您的代码以编程方式单击第一个链接并收到警报。哈希设置为与以前相同的值,因此 hashchange 处理程序不执行任何操作。
  3. 点击“第一”
  4. 您的点击处理程序被调用,alert()但您的哈希保持不变,因此您的 hashchange 处理程序不会被调用。因此,在这种情况下,您会收到 1 个警报。

目前还不完全清楚您要完成什么......因为如果您只想操纵哈希值,您可以从 hashchange 处理程序中执行此操作 - 为什么您的 hashchange 处理程序单击您的链接?同样,如果您只想操作与链接相关的某些属性,您可以在点击处理程序中执行此操作——您为什么要费心将其粘贴在哈希中?

于 2013-05-28T21:36:55.913 回答