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

的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

最佳答案

仅在单击选项卡时,如何防止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
} );

关于javascript - 防止触发第二个事件:点击与网址哈希更改,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34228869/

10-12 14:10