0

2 つのスクリプトにリンクする HTML があるとします。

...
<script type="text/javascript" src="general.js"></script>
<script type="text/javascript" src="[pagename]_specific.js"></script>
...

2 つのスクリプトのそれぞれに、独自の jQuery が.ready()定義されています。

general.js:

jQuery(function() {
  var foo;
  $('#btn').click(function() {alert(foo())});
}

home_specific.js:「[ページ名]_specific.js」の例

jQuery(function() {
  foo = function() {alert("hello")};
}

#btnボタン要素はどこにありますか。

「general.js」は複数のページで共有されるスクリプトで、各ページには割り当てられた関数の動作を定義するための専用の「[pagename]_specific.js」がありますfoo

クリックする#btnと、「こんにちは」ダイアログが表示されると思っていましたが、代わりにUncaught TypeError: undefined is not a functionクロム開発者ツールが表示されました。この SO questionから、2 つ.ready()に 2 つの別々のイベント ハンドラーがあるためだと理解しています。

質問:別の無名関数を定義する代わりに、.ready()"[pagename]_specific.js" を "general.js" のイベント ハンドラーに追加する方法はありますか?.ready()

4

1 に答える 1

0

スクリプトで実際に起こっていることは、あなたが考えていることとは異なります。

以下では:

jQuery(function() {
  var foo;
  $('#btn').click(function() {alert(foo())});
}

foo の前に var を入力してローカル コピーを作成しました。この場合、foo は未定義です。

以下では:

jQuery(function() {
  foo = function() {alert("hello")};
}

実際に、foo というグローバルにアクセス可能な関数を作成しました。ただし、これは呼び出されるまで実行されません。しかし、最初のスクリプトでは、それを呼び出してみます。しかし、実際に何が起こるかというと、スクリプトはローカルで定義された未定義の foo という変数を使用して試行します。

以下は私がすることです

// general.js:
jQuery(function() {
  $('#btn').click(function() { 
    foo(); 
  });
});

// home_specific.js
var foo = function() {
  alert("hello");
};

これがお役に立てば幸いです!! 何が起こっているのか理解してください!

于 2012-09-28T01:29:32.877 に答える