-2

我是 javascript 新手,所以我无法理解" + objID +"then 的含义。

timer[objID]=setTimeout(m,150);

这是所有的代码。如果需要,您可以将其复制/粘贴到编辑器中以查看结果。谢谢!

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
    <html>
    <head>
        <title>TEXT</title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <style type="text/css">      **/*the css */**
            html, body { margin: 0px; padding: 0px; }
            h1 { margin-top: 30px }
            #menu a, .subMenu a {
                display: block;
                font-family: Arial, sans-serif;
                font-size: 10pt;
                font-weight: bold;
                text-decoration: none;
                color: black;
                border: 1px solid #ddd;                     
            }
            #menu a:hover, #menu a:active, .subMenu a:hover, .subMenu a:active {
                background-color: #eee;
                border-color: #999;
            }       
            #menu {
                background-color: #ddd;
                position: absolute;
                top: 0px;
                left: 0px;
                width: 100%;
            }
            #menu a {
                width: 100px;
                float: left;
                margin-left: 5px;
                padding: 2px;
            }
            .subMenu {
                width: 150px;
                top: 26px;
                background-color: #ddd;
                border: 1px solid black;
                position: absolute;
                visibility: hidden;
            }
            .subMenu a {
                display: block;
                width: 90%;
                margin: 0px;
                padding: 4px;
            }
            #subMenu1 { left: 5px }
            #subMenu2 { left: 125px }
            #subMenu3 { left: 230px }

        </style> **/*the css ends*/**

                   <script type="text/javascript">
            var timer= new Object(); 

            **/* this func. sets the visibility
            of hidden menus which appear by
            "onmouseover"*/**

            function setVisibility(objID, visible){ 
            var obj=document.getElementById(objID);
            if(obj.style.visibility=visible){
                obj.style.visibility="visible";
            }
            else{obj.style.visibility="";}

            }

            **/* this one calls the func. above
            if needed to show the hidden
            menu*/**

            function showMenu(objID)
            { setVisibility(objID,true);
                clearTimeout(timer[objID]);
            }
            **/*this one hides by onmouseout putting false boolean in func.                          
                     setVisibility "visible" parameter*/** 
            function hideMenu(objID)
            { 
                var m="setVisibility('"+objID+"',false)";
                timer[objID]=setTimeout(m,150);
            }


        </script>
    </head>

    <body>
        <h1>Text</h1>
        <div id="menu">
            <a href="#" 
                onmouseover="showMenu('subMenu1')"
                onmouseout="hideMenu('subMenu1')">Module 1</a>
            <a href="#" 
                onmouseover="showMenu('subMenu2')"
                onmouseout="hideMenu('subMenu2')">Module 2</a>
            <a href="#" 
                onmouseover="showMenu('subMenu3')"
                onmouseout="hideMenu('subMenu3')">Module 3</a>
        </div>

        <div id="subMenu1" class="subMenu"
        onmouseover="showMenu('subMenu1')"
                onmouseout="hideMenu('subMenu1')">
            <a href="../module1/statements/for-1.html">Text</a>
            <a href="../module1/statements/if-1.html">Text</a>
            <a href="../module1/statements/switch.html">Text</a>    
        </div>

        <div id="subMenu2" class="subMenu"
        onmouseover="showMenu('subMenu2')"
                onmouseout="hideMenu('subMenu2')">
            <a href="../module2/objects/build-in/array.html">Text</a>
            <a href="../module2/objects/build-in/boolean.html">Text</a>
            <a href="../module2/objects/build-in/date.html">Text</a>
            <a href="../module2/objects/build-in/global-object.html">Text</a>
            <a href="../module2/objects/build-in/math.html">Text</a>
            <a href="../module2/objects/build-in/number.html">Text</a>
        </div>
        <div id="subMenu3" class="subMenu"
        onmouseover="showMenu('subMenu3')"
                onmouseout="hideMenu('subMenu3')">
            <a href="../module3/document.html">Text</a>
            <a href="../module3/history.html">Text</a>
            <a href="../module3/location.html">Text</a>
            <a href="../module3/navigator.html">Text</a>
        </div>
    </body>
    </html>
4

4 回答 4

0

这似乎objID是一个变量,它等于 akey的 a并且在 javascript 中引用属性object的语法之一是object

objectName[keyName]

当你使用这个方法时,你可以输入一个string带引号的(例如"myKey")或一个变量名,用另一种方法

objectName.keyName

您只能输入一个字符串,不带引号。

所以timer[objID]=意味着有一个object被调用timer的,a 属性被添加到其中,并且无论当前值objID是什么,它都会被调用。

在这种特定情况下 ( timer[objID]=setTimeout(m,150);) 它是一个定时运行的函数,可以稍后取消window.clearTimeout(timer[objID]);- 提供objID仍然具有相同的值。

于 2013-09-15T09:47:41.083 回答
0

这是在很短的时间间隔后隐藏菜单的一种非常糟糕的方法。

您最好将其更改为:

function hideMenu(objID)
{ 
    timer[objID] = window.setTimeout(function() {
        setVisibility(objID, false);
    }, 150);
}

setTimeout方法还可以接受原始字符串,然后对其进行评估并即时执行。JavaScript 中的评估(也被eval()方法使用)不是一个好的做法,最好尽可能避免。在这种情况下,可以通过将函数传递给setTimeout.

更深入地关注语法,让我们采取这一行:

var m="setVisibility('"+objID+"',false)";

这是创建一个字符串并添加一个在其中调用的变量的值,objID用单引号将其包裹起来,以便将其作为字符串传递。例如,如果该变量的值是T250结果字符串,则为:

setVisibility('T250',false)
于 2013-09-15T09:38:39.020 回答
0

我将向您解释此功能:

function hideMenu(objID)
{ 
     var m="setVisibility('"+objID+"',false)";
     timer[objID]=setTimeout(m,150);
 }

首先将变量m设置为字符串。这个字符串被包裹在". 但是您需要将变量添加objID到字符串中。所以字符串用"加号(+)关闭,用于连接变量objID。(的参数hideMenu)。然后这个字符串再次连接到另一个字符串。

这意味着如果你打电话

hideMenu( 10 ) 

变量m是 to:setVisibility('和 的内容objID,在本例中为 10 和',false)

setVisibility('10',false)

于 2013-09-15T09:41:31.993 回答
0
“ setVisibility ( ' ” + objID +“ ' , false ) ”

是三个元素的串联。

“ setVisibility ( ' ” 
objID 
“ ' , false ) ”

第一个和最后一个是字符串,objID 在此上下文中转换为字符串。

所以如果 objID 是 '14' 你会得到值(字符串)

“ setVisibility ( ' 14 ' , false ) ”

分配给您的变量m

于 2013-09-15T09:41:41.707 回答