2

このコード ブロックの場合:

  if(!skipit)
    {
    var update_argument='';
    if (document.formname.fieldname)
      {
        update_argument=document.formname.fieldname[document.formname.fieldname.selectedIndex].value;
      }
    window.setTimeout('updatepcols(update_argument)',250);
       return false;
    }

「update_argument」が未定義であるという setTimeout 呼び出しでエラーが発生しました。null 文字列値を割り当てる行を「var」から「window.」に変更すると、エラーはなくなり、コードは機能しました。ここにはスコープの問題があると思いますが、私はそれに従いません。この場合 update_argument が定義されていないのはなぜですか。(updatepcols は価格列を更新する関数です。)

4

3 に答える 3

4

代わりにこれを試してください。この方法でクロージャを使用すると、update_argument

setTimeout(function(){
    updatepcols(update_argument);
},250);

テキストとして渡したスクリプトが評価されると、グローバルスコープで、つまりupdate_argument宣言されているローカルスコープの外で実行されるのはおかしいと思います。

setTimeout('updatepcols(update_argument)',250);
于 2012-06-22T17:41:47.757 に答える
1

これがスコープの問題かどうかはわかりませんが、setTimeout 呼び出しを変更するとうまくいくはずです。

window.setTimeout('updatepcols('+update_argument+')',250);

このフィドルは次のことを示しています: http://jsfiddle.net/mLrqZ/

于 2012-06-22T17:48:32.113 に答える
0

表情を変える。ローカル変数をコールバック関数に渡したい場合は、次のように記述する必要があります。

window.setTimeout('updatepcols('+update_argument+')', 250);

または、代わりにクロージャーを使用する場合は、次のようにします。

window.setTimeout(function(){ updatepcols(update_argument) }, 250);

ええ、他の人が言うように、クロージャーを使用する方が良い方法です。

于 2012-06-22T17:57:19.980 に答える