javascript - 手动输入url时location.hash问题,脚本不运行

标签 javascript jquery html

我试图通过使用散列变量来访问页面中的某些选项卡。

它按预期工作:

  • 页面内的链接
  • 使用地址 (test.php#tab2) 打开一个新的浏览器窗口/标签

它在以下情况下不起作用:

  • 当您已经加载了 test.php 并在地址栏中手动输入“#tab2”(使其成为 test.php#tab2 并按回车结束) .页面未加载且脚本未运行。

我在不同的浏览器上试过了,结果都差不多。在 Chrome 中,您可以在地址栏中选择整个 url,然后(再次)按 enter,这有效 - 但一般来说它是相同的问题。

我已经从我的页面中取出脚本并制作了一个小模板,完整代码:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<meta http-equiv="Content-language" content="en" />
<script type="text/javascript" src="inc/jquery-1.6.2.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
    $.fn.showPage = function(hash) {
        if (hash === '#tab1' || hash === '') {
            if ($('#tab1').is(':hidden')) {
                $('#tab1').show();
                $('#tab2, #tab3').hide();
            }
        } else if (hash === '#tab2') {
            if ($('#tab2').is(':hidden')) {
                $('#tab2').show();
                $('#tab1, #tab3').hide();
            }
        } else if (hash === '#tab3') {
            if ($('#tab3').is(':hidden')) {
                $('#tab3').show();
                $('#tab1, #tab2').hide();
            }       
        }       
    }

    $('.menu').click(function(e){
        e.preventDefault();
        var hash = $(this).attr('id');
        window.location.href = 'test.php' + hash;
        $(document).showPage(hash);
    });

    var hash = location.hash;
    $(document).showPage(hash);
});
</script>
</head>

<body>

<a href="#" id="#tab1" class="menu">Tab 1</a> <a href="#" id="#tab2" class="menu">Tab 2</a> <a href="#" id="#tab3" class="menu">Tab 3</a>

<div id="tab1">

Tab 1

</div>

<div id="tab2" style="display:none;">

Tab 2

</div>

<div id="tab3" style="display:none;">

Tab 3

</div>

</body>
</html>

我希望我已经说得够清楚了。感谢任何反馈!

最佳答案

如果页面已加载并且您将 #... 附加到 URL,则不会执行任何操作,因为您不会触发 .menu 单击处理程序,并且不会执行任何操作else 使 .showPage 函数执行。

您可能想改用 windowhashchange 事件。这样,每当哈希发生变化(链接/手动/等)时,您都可以执行 .showPage

http://jsfiddle.net/yJTJz/

$(window).bind('hashchange', function(){
    $(document).showPage(location.hash); // does include the # for the record
});

关于javascript - 手动输入url时location.hash问题,脚本不运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6857982/

相关文章:

javascript - 如何在 JavaScript 中循环浏览图片?

javascript - 将点击事件的结果传递给调用函数

jquery - 焦点在几个<p :inputNumber>之间自动跳转

html - 是否可以在不使用 &lt;style&gt; 或 <link> 标签的情况下导入内联字体

javascript - 如何使用jquery从图像列表中获取点击图像的属性

javascript - 为什么我在 jQuery 中会收到此错误?

javascript - 需要在状态退出时关闭模态

javascript - 我的网站的 Facebook checkin 按钮

jquery - 如何禁用对移动网站的访问?

javascript - 使用 jQuery 将 DIV 放在另一个 DIV 上