哈希更改取消双触发器("click" )



我这里有一些循环,代码下的解释

        $(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插件这是一个活生生的例子-> EXTERNAL LINK ON MY SERVER

注意,当你点击"#first"时,你会收到2个警报但当粘贴链接时更改hash -> changed hash你只有一次警报。

它就像一个循环,当你点击链接时,你会从点击中得到警报,并从改变URL触发新的哈希。所以你有两个警报。

我只想要一个警报。在这种情况下。你粘贴链接,它的触发链接应该来自哈希名称,你得到1个警告。当你点击链接时它会改变哈希值但不会触发它改变这个哈希值

您收到两个警报,因为当您加载没有散列的页面时,您有效地单击了'first'链接两次。下面是发生的事情:

  1. 访问您的网站
  2. 你的'hashchange'处理程序被调用(因为某些原因你调用$(window).trigger('hashchange'),但是因为没有newHash值,什么也没有发生
  3. 点击"首次"
  4. 你的点击处理程序被调用,你调用alert()(第一个警报!),然后哈希被改变
  5. 因为哈希从你的点击处理程序中改变,你的'hashchange'处理程序被调用,现在因为newHash有一个有效值,你的处理程序再次点击链接(编程),你得到第二次警报。

当使用预设散列加载页面时,会发生类似的事件集:

  1. 使用哈希集
  2. 访问您的站点
  3. 你的'hashchange'处理程序被调用,但不像以前有一个非空的newHash值,所以你的代码编程点击第一个链接,你得到一个警报。哈希值被设置为与之前相同的值,因此hashchange处理程序不做任何操作。
  4. 点击"首次"
  5. 你的点击处理程序被调用,alert()被调用,但你的哈希值保持不变,所以你的哈希变化处理程序不被调用。所以在这种情况下,你只收到一个警报。
我并不完全清楚你想要完成什么……因为如果您只想操作哈希值,那么可以从hashchange处理程序进行操作——为什么hashchange处理程序要点击链接呢?类似地,如果您只想操作与链接绑定的某些属性,则可以在click处理程序中进行操作—为什么要把它放在散列中呢?

问题毫无意义,现在解决了。在这种情况下,我只需要。

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

这是微不足道的,因为我的问题很复杂,但我需要睡觉来理解

相关内容

  • 没有找到相关文章

最新更新