我有一个站点,它依赖于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>
然而,不是工作,而是发生这样的事情:
javascript:location.hash=buildHash('c=8')
,内容为#c=8
,点击后退箭头即可转到预期目标。#c=8
我可以像这样定义链接,一切正常:
<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
}
}