0

何らかの理由で、javascript のタイムアウト後に HTML を変更できません。私が使用しているコードは次のとおりです。

setTimeout("$(\"#display p\").html(newDescription);", 250);

これに何か問題がありますか?タイムアウトを削除すると、スクリプトは完全に機能します。そのバージョンは次のとおりです。

$("#display p").html(newDescription);

それが違いを生むなら、私はChrome 22を実行しています

4

2 に答える 2

5

はい、最初の引数は関数である必要があります。

var newDescription = 'The Description';
setTimeout(function(){
  $("#display p").html(newDescription);
}, 250);

また

var newDescription = 'The Description',
    myfunc = function(){
       $("#display p").html(newDescription);
    };

setTimeout(myFunc, 250);

さらにnewDescription、関数にアクセスできるスコープ内にある必要があります。

于 2012-10-17T22:16:58.750 に答える
2

文字列を setTimeout に渡すと、コードはグローバル スコープで評価されます。多くの場合、newDescriptionローカル変数であるため、250 ミリ秒のタイムアウト後にコードが評価されると使用できなくなります。

eval() を使用してはならないのと同じ理由で、文字列を setTimeout() に渡してはいけません。関数を渡すことにより、スコープ変数を保持し、JavaScript エンジンが関数を最適化できるため、パフォーマンスが向上します (文字列引数のコードを最適化することはできません)。

var newDescription = "My fancy new description";
setTimeout(function(){
    $("#display p").html(newDescription);
}, 250);
于 2012-10-17T22:20:46.853 に答える