【问题标题】:Prevent second event from firing: click vs. URL hash change防止触发第二个事件:单击与 URL 哈希更改
【发布时间】:2015-12-12 01:15:55
【问题描述】:

我的一个页面上有标签。每个选项卡都加载动态内容:

HTML

<ul>
    <li><a href="#tab-1">TAB 1</li>
    <li><a href="#tab-2">TAB 2</li>
    <li><a href="#tab-3">TAB 3</li>
</ul>

jQuery - onclick

$('li a').on('click', function(e) {
    $('li a').removeClass('active');
    $(this).addClass('active');
    // Make Ajax call to get data to display...
});

此外,我正在处理浏览器的后退按钮。每次单击按钮并且 URL 中的选项卡哈希值发生变化时,都会激活相应的选项卡并检索其数据:

jQuery - onhashchange

$(window).on('hashchange', function() {
    var hash = $.trim(window.location.hash);
    var $link = $('li a[href="' + hash + '"]');

    if ($link.length) {
        $link.trigger('click'); // Pass the flow to onclick handler
    }
});

后退按钮工作正常。问题在于,当单击选项卡时,两个 事件(onclickonhashchange)都会被触发,这会导致 Ajax 调用两次

如何防止onhashchange仅在标签被点击时?

【问题讨论】:

  • 我认为这不是正确的方法。跟踪用户在 JS 中单击链接时的哈希值,在位置重定向之前将哈希值附加到 url,然后您可以从下一页的新 url 读取和解析。

标签: javascript jquery


【解决方案1】:

如何仅在单击选项卡时防止 onhashchange?

不要。

而是让 hashchange 处理程序始终发送 ajax 请求。

// Click on anchor automatically triggers hashchange
$('li a').on('click', function(e) {
    $(this).addClass('active');
});

// hashchange is triggered by both clicks and back button 
$(window).on('hashchange', function() {
   // Make ajax call to fetch content for location.hash
} );

【讨论】:

  • 对不起,我迷惑了一分钟,写了一些愚蠢的东西。这个想法似乎非常简单,谢谢:)
猜你喜欢
  • 2021-10-04
  • 2019-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-03
  • 2014-06-06
  • 2011-02-22
  • 2015-04-28
相关资源
最近更新 更多