1

ここに問題があります..私はこのようなjavascript.jsという名前のjavascriptファイルを持っています

$(document).ready(function(){

 function init()
  { 

    //code goes here

  }
  }

現在、index.html ファイルには、init() 関数を呼び出すコマンド ボタンがあります。

   <html>
   <head><script src=javascript.js ....></script>
   <body><button type="button" onclick="init()">Call Init!</button></body>
   </html>

しかし、それはそれを呼びません。期待どおりに何も起こりません。解決策を提案してください。

4

4 に答える 4

9

$(document).ready()スコープ外で関数を定義する必要があります。

于 2012-08-05T05:32:53.320 に答える
3

onclick属性はグローバル コンテキストで実行されます。関数は、 jQueryinitに渡す無名関数にスコープされます。3 つのソリューション:

  • init関数を ready 関数の外に移動し、グローバル スコープに移動します。
  • init関数をグローバル オブジェクトのプロパティとしてエクスポートします。window.init = function() {…};
  • jQuery を使用するため、属性にハンドラーを定義する必要はありません。代わりに (ready 関数内で)$("button").click(function init() {…});使用idします。
于 2012-08-05T05:46:08.387 に答える
2

ページを chrome で表示してみてください。F12 を押してコンソールを表示します。問題をすばやくデバッグできます。ただし、一見すると、 $(document).ready 関数が適切に閉じられていないことがわかります。追加 ');' 含めたコードの最後に。また、script タグの javascript.js を引用符で囲みます。それが役立つかどうかを確認してください。

于 2012-08-05T05:42:40.633 に答える
1

使わない理由

function init()
{ 
   $(document).ready(function() {
       //code goes here
   });
}

「//コードがここに入る」が進行したかどうかを追跡するために、フラグも使用できます。そのため、ドキュメントの準備がまだ整っていない場合は、「クライアント ブラウザがハングしないように」一定の一時停止間隔で、setTimeOut 関数を使用して while ループを使用できます。

于 2013-01-22T14:34:20.750 に答える