为什么运行以下javascript代码?

时间:2017-07-10 09:04:14

标签: javascript json

我从朋友那里借了以下代码以获得理解,但我在这里坚持: -



function menubar() {
  var menu = '{"str":[{"mitem":"Homepage","id":"1"},{"mitem":"About Us","id":"2"},{"mitem":"Contact Us","id":"3"},' + '{"mitem":"Feedback","id":"4"}]}'

  var jsobj = JSON.parse(menu);

  var stringbody = '';

  for (i = 0; i < jsobj.str.length; i++) {
    stringbody += '<a href="javascript:callme(' + jsobj.str[i].id + ');">' +
      '<div id="menubar">' + jsobj.str[i].mitem + '</div></a>';
  }
  document.getElementById('menu').innerHTML = stringbody;
}

window.onload = function() {
  var x = document.getElementById("items");
  var y = document.getElementById("iconmain");

  y.onclick = function() {
    x.style.display = (x.style.display == "none") ? "block" : "none";
  }
}
&#13;
<html>
    <head>
        <link href="page1.css" rel="stylesheet" type="text/css">
        <script src="page1.js" type="text/javascript"></script>
    </head>
    
    <body>
        <div id="header"><h1>XYZ Gym</h1></div>
        <div id="menu"></div>
        
        <script>
            menubar();
        </script>
        
        <div id="iconmain">
            <div id="icon"></div>
            <div id="icon"></div>
            <div id="icon"></div>
        </div>
        
        <div id="items">
            <ul>
                <hr>
                <li><a href="#">item 1</a></li><hr>
                <li><a href="#">item 2</a></li><hr>
                <li><a href="#">item 3</a></li><hr>
                <li><a href="#">item 4</a></li><hr>
                <li><a href="#">item 5</a></li><hr>
            </ul>
        </div>
        
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.<br><br></p>
    </body>
</html>
&#13;
&#13;
&#13;

因此,代码似乎在括号软件上完美运行。但是我们在(href)标签下有一个函数--javascript:callme(),我们从未定义过它!

这是预定义的功能吗?因为我看不到任何其他javascript文件的链接,但代码似乎仍在运行。enter image description here

如果我删除该行以便我制作它  stringbody+='<div id="menubar">'+jsobj.str[i].mitem+'</div></a>';

然后我得到以下输出: - enter image description here 显然它不是一段冗余的代码..

1 个答案:

答案 0 :(得分:0)

不,它不是预定义的功能,在Chrome中调试代码会显示此错误

VM196:1 Uncaught ReferenceError: callme is not defined
at <anonymous>:1:1
(anonymous) @ VM196:1

CSS样式应用于HTML,如果CSS中定义的选择器是在HTML中找到的,那么更改字符串应该是这样的,请注意我没有省略起始锚标记

stringbody+= '<a href="http://www.google.com">'+
                                    '<div id="menubar">'+jsobj.str[i].mitem+'</div></a>';

可以使用任何链接代替http://www.google.com