一个href = javascript不同的浏览器,奇怪的行为

时间:2013-12-26 20:12:55

标签: javascript href

我有一个站点,它依赖于PHP解析输出导航栏的JSON文件(我构建了一个编辑器,以便客户可以维护内容)。 JSON文件中的链接具有以下结构:

"Text to Display": {
    "href": "myPage.php",
    "child": {
        "Text for Child Link": {
            "href": "secondPage.php",
            "child": {}
        }
    }

一个递归函数(PHP)循环并输出导航栏,如:

function block_menuList($links) {
    $o='';
    foreach ($links as $k => $v) {
        $href='javascript:void(0)'; // default to link nowhere
        if (isset($v['href'])) $href=$v['href']; // pull link from array
        $o.="<li><a href='$href'>$k</a>"; // output list item
        if (isset($v['child']) && is_array($v['child'])) $o.="<ul>".block_menuList($v['child'])."</ul>"; // if there's a child list call recursively
        $o.="</li>";
    }
    return $o;
}

网站在哈希模型系统上运行,我希望能够添加链接以更改哈希模型,而无需将其切换为有条件地使用onclick而不是href。 javascript没有响应我的预期。我应该能够正确使用:

<a href="javascript:location.hash=buildHash('c=8')">My Link</a>
然而,不是工作,而是发生这样的事情:

  • Firefox的网址栏显示javascript:location.hash=buildHash('c=8'),内容为#c=8,点击后退箭头即可转到预期目标。
  • Chrome保持网址栏相同,但用#c=8
  • 替换了正文的HTML

我可以像这样定义链接,一切正常:

<a href="javascript:void(0)" onclick="location.hash=buildHash('c=8')">My Link</a>

从javascript调用buildHash也可以,例如在JQuery事件监听器中。只有<a href="javascript:something()">方法似乎被破坏了,但是<a href="javascript:alert('yu no build hash?')">的简单测试会运行并显示警告框。

编辑:由于这种结构,我将无法绑定JS / JQuery事件。这是我现在在网站上使用的完整对象,所以我的问题更容易理解:

{
    "Home": {
        "href": "index.php",
        "child": {
            "About Us": {
                "href": "view.php?pg=about",
                "child": {}
            },
            "Contact Us": {
                "href": "view.php?pg=contact",
                "child": {}
            },
            "Location & Hours": {
                "href": "view.php?pg=location",
                "child": {}
            },
            "News": {
                "href": "news.php",
                "child": {}
            }
        },
        "parent": true
    },
    "Products": {
        "href": "cart.php",
        "child": {
            "categories": {
                "href": "categories",
                "child": {}
            }
        },
        "parent": true
    },
    "Sales": {
        "href": "javascript:filterModel.goto(\"sl=1\", \"\")",
        "child": {},
        "parent": true
    },
    "Clearance": {
        "href": "javascript:filterModel.goto(\"cl=1\", \"\")",
        "child": {},
        "parent": true
    },
    "My Account": {
        "href": "account.php",
        "child": {
            "Order Status": {
                "href": "ordStat.php",
                "child": {}
            },
            "Order History": {
                "href": "ordHist.php",
                "child": {}
            }
        },
        "parent": true
    }
}

0 个答案:

没有答案