-2

私はjavascriptが初めてなので、これが" + objID +"来るの意味を理解できません。

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

それは変数のようで、これは aの a にobjID等しく、javascript で属性を参照する構文の 1 つはkeyobjectobject

objectName[keyName]

この方法を使用する場合、string引用符で囲んで (例: "myKey") または変数名を入力できます。

objectName.keyName

引用符なしで文字列のみを入力できます。

これは、 a 属性が追加されている と呼ばれる があり、 の現在の値が何であれ、それが呼び出されることtimer[objID]=を意味します。objecttimerobjID

この特定のケースでは ( 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 ) ”

3 つの要素の連結です。

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

最初と最後は文字列で、objID はこのコンテキストで文字列に変換されます。

したがって、objID が '14' の場合、値 (文字列) を取得します

“ setVisibility ( ' 14 ' , false ) ”

変数mに代入

于 2013-09-15T09:41:41.707 に答える