0

このかなり基本的な質問で申し訳ありませんが、ここで終わりです!

ページの読み込み時に実行したいJavaScript関数があります...簡単ですよね?関数をドキュメントの準備、ウィンドウの準備、メイン関数の前後などに配置しようとしましたが、何も機能していないようです。

これまでのコード:

function calcme() {         
    DA FUNCTON
    }

$(document).ready(function(){   
    calcme();
    $("input").bind("keyup", calcme);

});

注意してください...キーアップバインドは機能しますが、ページの読み込み時に読み込むにはcalcme関数が必要です。考え?

更新: リクエストに応じて、ここに完全なフィドルがあります。http://jsfiddle.net/vpsSA/

4

2 に答える 2

1

問題が見つかりました:calcme()関数は、入力の 1 つのコンテキストから呼び出されたと想定し、内部で this.value を使用します。したがって、引数なしで呼び出すと、明らかに失敗します。keyupこれは、直接呼び出すのではなく、各入力をトリガーすることで解決できますcalcme()。以下のフィドルを参照してください。

作業フィドル: http://jsfiddle.net/vpsSA/1/


ready()ハンドラーでは、bind ステートメントは呼び出しの後に来ますcaclme()。そして、あなたが言及したように、イベントバインディングは機能しました。これの意味は:

a)calcme()ロード時に確実に実行されました。calcme()呼び出しの後に来るバインドステートメントが期待どおりに機能したと述べたので、他に方法はありません。

b) calcme()JS エラーをスローしませんでした。もしそうであれば、エラーで停止し、イベント バインディングは行われませんでした。JS コンソールで確認できる警告がスローされた可能性があります。

c) の中身calcme()を提供していないため、確かなことは言えません。しかし、ロード時に期待した結果が得られなかったために、何らかの条件エラーが発生したように見えcalcme()ます。ロード時に実行した後にcalcme()初期化されたものを内部で使用していますか。ハンドラーの最初の行としてステートメントを挿入し、Firebug または Chrome でトレースすることをお勧めします。debugger;ready()

于 2012-10-03T00:54:00.890 に答える
0

これを試して:

function calcme() {         
   try {
      //your code
   }
   catch(e) {
      alert('error: ' + e);
   } 
}

if (typeof $ === undefined)) {
   alert('not jquery');
}

$(document).ready(function(){   

    if (typeof calcme === undefined) {
       alert('calcme not exist');
    }
    else {
       calcme();
       $("input").bind("keyup", calcme);
    }
});
于 2012-10-03T00:54:05.883 に答える