0

setTimeout関数に問題があります。これはコードです:

1   var urlArray = ["pic1.gif"; "pic2.gif"]

2   function changeBackground(elementId, backgroundImage){
3       document.getElementById(elementId).style.background="url("+backgroundImage+")";
4   }

5   function mouseover_1(elementId){
6           changeBackground(elementId,urlArray[0]);
7           setTimeout("changeBackground(elementId,urlArray[1])",300);
8   }

そして体内で:

<area shape="rect" coords="0,0,95,91" onMouseOver="mouseover_1('navigator_1')">

これで、Javascriptコードの6行目はチャームのように機能しますが(画像が変更されます!)、7行目は機能しません(画像は変更されません)。これはFirefoxでのデバッグによるエラーです。

elementId is not defined  line: 7

しかし、6行目は機能しているので、問題が何であるかは本当にわかりません。何か提案はありますか?

4

3 に答える 3

5

文字列をに渡すとsetTimeout、その文字列は関数のコンテキストで評価されません(したがってelementId存在しません)。

代わりにクロージャを使用する必要があります。

setTimeout(function()
{
    changeBackground(elementId, urlArray[1]);

}, 300);
于 2013-01-26T23:50:14.890 に答える
4

このフォームを試して、パラメータをsetTimeout関数に渡すことができます。

setTimeout(changeBackground, 300, elementId, urlArray[1]);

そしてここであなたは同じことをする他のフォームを見ることができます:

setTimeoutで呼び出された関数にパラメーターを渡す

于 2013-01-26T23:55:57.520 に答える
0

これを読んだ後:http://www.makemineatriple.com/2007/10/passing-parameters-to-a-function-called-with-settimeout

...「parameter=null」が必要であることを学び、最終的にクロージャーを実装しました。

setTimeout(function(){changeBackground(elementId,urlArray[1]);
    parameter = null},300);

ただし、関数setTimeout()は常にsetInterval()スレッドにラップする必要があります。そうしないと、スムーズに実行されません。

于 2013-01-27T01:55:58.567 に答える