javascript
  • iphone
  • html
  • 2009-03-11 13 views 2 likes 
    2

    これはなぜ動作しないのか誰にでも教えてもらえますか?機能setTimeoutに渡された変数が機能していませんか?

    function changeBG(element_id){ 
         document.getElementById(element_id).className= "arrowActive"; 
         setTimeout("document.getElementById("+element_id+").className= 'arrow'", 300); 
    } 
    

    firebugでは、setTimeout()に渡されたelement_idが定義されていないというエラーが表示されます。

    答えて

    5

    変数element_idは、文字列になります。

    より良い方法は、このように、クロージャを使用することです:

    function changeBG(element_id) 
    { 
         var elm = document.getElementById(element_id); 
         elm.className = "arrowActive"; 
         setTimeout(function() { elm.className= 'arrow'; }, 300); 
    } 
    

    文字列内のコードを渡すとnot recommendedであることに留意すべきです。

    2

    試してみてください。私はあなたがgetElementByIdに渡している文字列パラメータに引用符を追加しました

    setTimeout("document.getElementById('" + element_id + "').className= 'arrow'", 300); 
    

    注意してください。 MYIDは引用符にする必要がありますが、それはないということ

    document.getElementById(myId).className = ... 
    

    注意:お使いのタイムアウトコードは次のようになりますので

    2

    これを行うための最善の方法は、閉鎖

    function changeBG(element_id) 
    { 
         var elem = document.getElementById(element_id); 
         elem.className= "arrowActive"; 
         setTimeout(function(e) 
         { 
           return function() 
           { 
             e.className = 'arrow'; 
           } 
         }(elem), 300); 
    } 
    
    である
    関連する問題