【问题标题】:How to prevent auto scrolling when click tab单击选项卡时如何防止自动滚动
【发布时间】:2016-04-09 03:57:51
【问题描述】:

我正在处理一个项目并卡在选项卡上。无论我做什么,当我点击一个标签时页面向下滚动。这是我的 HTML:

<ul class="list">
    <li class="tab1 active">
        <i class="fa fa-external-link"></i> 
        <a href="#quick-reports" class="tab">Quick Reports</a>
    </li>
    <li class="tab1">
        <i class="fa fa-star-o"></i>
        <a href="#my-folders" class="tab">My Folders</a>
    </li>
    <li class="tab1">
        <i class="fa fa-folder-open-o"></i>
        <a href="#my-team-folders" class="tab">My Team Folders</a>
    </li>
    <li class="tab1">
        <i class="fa fa-files-o"></i>
        <a href="#public-folders" class="tab">Public Folders</a>
    </li>
</ul>
var open_tab = function() {
    $('.tab1').each(function (i, tab) {
        UTILS.addEvent(tab, 'click', function() {
            $('.list li.active').removeClass('active');
            $(this).addClass('active');
            $('.active-panel').removeClass('active-panel');

            var target_panel_selector = $(this).find('a').attr('href');
            $(target_panel_selector).addClass('active-panel');
            window.location.hash = target_panel_selector ;
        });
    });
};

而.active-panel的样式是display: block。我尝试使用:

e.preventDefault();

或

tab.find('a').on('click', function(e){
    alert("finally!!");
    e.preventDefault();
});

还有我在网上找到的其他东西,但不行,不起作用。

【问题讨论】:

  • alert() 是否出现在您上一个 JS 示例中?从理论上讲,这应该有效。
  • 未收到警报。
  • 试试$(tab).find('a')....

标签: javascript jquery html


【解决方案1】:
<ul class="list">
    <li class="tab1 active">
        <i class="fa fa-external-link"></i>
        <a data-href="#quick-reports" class="tab" href="javascript:void(0)">Quick Reports</a>
    </li>
    <li class="tab1">
        <i class="fa fa-star-o"></i>
        <a data-href="#my-folders" class="tab" href="javascript:void(0)">My Folders</a>
    </li>
    <li class="tab1">
        <i class="fa fa-folder-open-o"></i>
        <a data-href="#my-team-folders" class="tab" href="javascript:void(0)">My Team Folders</a>
    </li>
    <li class="tab1">
        <i class="fa fa-files-o"></i>
        <a data-href="#public-folders" class="tab" href="javascript:void(0)">Public Folders</a>
    </li>
</ul>

<script>
    function maketabActive($strElement)
    {
        $('.list li.active').removeClass('active');
        $strElement.addClass('active');
        $('.active-panel').removeClass('active-panel');

        var target_panel_selector = $strElement.find('a').data('href');
        $(target_panel_selector).addClass('active-panel');
        // Save selected tab index in session stroage.So after page refresh active tab will be maintained
        sessionStorage.setItem('selected-tab', $strElement.index());
    }
    $(document).ready(function () {
        // Check if selected tab is stored in session stroage
        if (sessionStorage.getItem('selected-tab'))
        {
            //Make tab active based on index got from session stroage
            maketabActive($(".tab1:eq(" + sessionStorage.getItem('selected-tab') + ")"));
        }
    });
    var open_tab = function () {
        $('.tab1').each(function (i, tab) {
            UTILS.addEvent(tab, 'click', function () {
                maketabActive($(this));
            });
        });
    };
</script>

【讨论】:

  • 这对于保存选定的选项卡很有用。但哈希不会改变。当我点击“li”中的“a”时,页面滚动。
  • 哇,谢谢!!!变化接近完美!!!但哈希没有改变,现在我只看到#javascript:void(0)
  • 很高兴,但我至少需要获得 15 点声望。如何将哈希更改为我在第一个选项卡上单击的 #quick_reports 之类的选项卡,而不是向我显示 #javascript:void(0) ?你的解决方案仍然可以工作......
  • 我上传到 github - WebApp - Project at js/tabs.js
  • 没错。我在 tabs.js 中更新了你写给我的内容。只是将此 data-href 添加到 URL 。我用这个:window.location.hash = "/"+target_panel_selector.slice(1);但你有更好的解决方案?
【解决方案2】:

更新 尝试在 click 事件中添加 return false 并按照 Diego 的建议更改哈希方法(但仅适用于较新的浏览器),如下所示:

var open_tab = function() {
    $('.tab1').each(function (i, tab) {
        UTILS.addEvent(tab, 'click', function() {
            $('.list li.active').removeClass('active');
            $(this).addClass('active');
            $('.active-panel').removeClass('active-panel');

            var target_panel_selector = $(this).find('a').attr('href');
            $(target_panel_selector).addClass('active-panel');
            //window.location.hash = target_panel_selector ;
            if(history.pushState) {
                history.pushState(null, null, target_panel_selector);
            } else {
                window.location.hash = target_panel_selector;
            }
            return false; // <-- add this line
        });
    });
};

【讨论】:

  • 也试过了,还是...:\
  • 可以链接真实页面吗?
  • 这里WebApp-Project - 我更新了,现在感谢阿里。但我需要标签的哈希值才能显示在 URL 上。你有解决办法吗?
【解决方案3】:

我认为当您在此处设置哈希时它正在滚动

 window.location.hash = target_panel_selector ;

看看:https://stackoverflow.com/a/14690177/5612557

【讨论】:

    【解决方案4】:

    你可以试试

    event.stopPropagation();

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多