\r\n```\r\nさらに「htmlから外部js内の関数呼び出し」みたいなキーワードで検索してみても\r\nそれらしいものがヒットしないのです\r\nもしかして、htmlから外部js内の関数を呼び出すのは不可能(大変)な事なのでしょうか?","answerCount":3,"upvoteCount":0,"datePublished":"2015-07-22T01:28:01.144Z","dateModified":"2015-07-22T01:28:01.144Z","acceptedAnswer":{"@type":"Answer","text":"```lang-javascript\r\njQuery(function($){\r\n function hoge(n){\r\n alert(n);\r\n }\r\n});\r\n```\r\n\r\nここで定義されている `hoge` は、一つ外側の function の中にしか存在しないため、それ以外の場所では実行できません、不可能です。\r\n\r\n例えば、次のように同じファイルであったとしても実行することはできません。\r\n\r\n```lang-javascript\r\njQuery(function($){\r\n function hoge(n){\r\n alert(n);\r\n }\r\n});\r\n$(function(){\r\n hoge(10);\r\n});\r\n```\r\n\r\n次のように、グローバルスコープ(function の中ではない一番外側)で定義すれば大丈夫です。\r\n\r\n```lang-javascript\r\nfunction hoge(n){\r\n alert(n);\r\n}\r\n$(function(){\r\n hoge(10);\r\n});\r\n```\r\n\r\nファイルが別でも可能です。もちろん script タグで関数が適宜されている js を読みこむ必要はあります。\r\n\r\n```lang-html\r\n\r\n\r\n```\r\n","dateModified":"2015-07-22T01:36:40.547Z","datePublished":"2015-07-22T01:34:04.383Z","upvoteCount":1,"url":"https://teratail.com/questions/13201#reply-19965"},"suggestedAnswer":[{"@type":"Answer","text":"別な関数の中で定義した関数は、その関数の外からアクセスすることはできません。\r\n\r\nグローバルに定義すれば、別な場所からでも使えますが、方法としては大きく2つあります。\r\n\r\n1. いちばん外側(`jQuery(){…}`より外)で関数を定義する\r\n2. グローバル変数に代入する(`window.hoge = hoge;`)","dateModified":"2015-07-22T01:36:38.554Z","datePublished":"2015-07-22T01:36:38.554Z","upvoteCount":0,"url":"https://teratail.com/questions/13201#reply-19966","comment":[{"@type":"Comment","text":"ありがとうございます\r\nグローバル変数の方法も調べてみます!","datePublished":"2015-07-22T02:10:00.298Z","dateModified":"2015-07-22T02:10:00.298Z"}]},{"@type":"Answer","text":"こんにちわ。\r\n\r\n`htmlから外部js内の関数呼び出し`という文言でgoogle先生に聞いてみました。\r\n一番上のサイトがまさにこの件だと思うのですが、一度確認してみてください。","dateModified":"2015-07-22T01:32:26.634Z","datePublished":"2015-07-22T01:32:26.634Z","upvoteCount":0,"url":"https://teratail.com/questions/13201#reply-19964","comment":[{"@type":"Comment","text":"ありがとうございます\r\nそのページのパターンとこの場合の違い(失敗する理由)がわからなかったので途方にくれていたところでした。","datePublished":"2015-07-22T02:04:46.893Z","dateModified":"2015-07-22T02:04:46.893Z"}]}],"breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"トップ","url":"https://teratail.com"},{"@type":"ListItem","position":2,"name":"JavaScriptに関する質問","url":"https://teratail.com/tags/JavaScript"},{"@type":"ListItem","position":3,"name":"JavaScript","url":"https://teratail.com/tags/JavaScript"}]}}}
質問するログイン新規登録
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

3回答

38814閲覧

外部js内の関数を、html内で実行する事には?

pandd8

総合スコア12

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2015/07/22 01:28

0

1

jQuery(function($){ function hoge(n){ alert(n); } });

この関数をhtmlから次のように呼びだそうとしたのですが
ReferenceError: hoge is not definedとなってalertが表示されませんでした。

<script> $(function(){ hoge(10); }); </script>

さらに「htmlから外部js内の関数呼び出し」みたいなキーワードで検索してみても
それらしいものがヒットしないのです
もしかして、htmlから外部js内の関数を呼び出すのは不可能(大変)な事なのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

lang

1jQuery(function($){ 2 function hoge(n){ 3 alert(n); 4 } 5});

ここで定義されている hoge は、一つ外側の function の中にしか存在しないため、それ以外の場所では実行できません、不可能です。

例えば、次のように同じファイルであったとしても実行することはできません。

lang

1jQuery(function($){ 2 function hoge(n){ 3 alert(n); 4 } 5}); 6$(function(){ 7 hoge(10); 8});

次のように、グローバルスコープ(function の中ではない一番外側)で定義すれば大丈夫です。

lang

1function hoge(n){ 2 alert(n); 3} 4$(function(){ 5 hoge(10); 6});

ファイルが別でも可能です。もちろん script タグで関数が適宜されている js を読みこむ必要はあります。

lang

1<script src="hoge.js"></script> 2<script> 3$(function(){ 4 hoge(10); 5}); 6</script>

投稿2015/07/22 01:34

編集2015/07/22 01:36
ngyuki

総合スコア4516

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pandd8

2015/07/22 02:09

なるほど、そうだったんですね! 色々なパターンわかりやすかったです、 ありがとうございました。
guest

0

別な関数の中で定義した関数は、その関数の外からアクセスすることはできません。

グローバルに定義すれば、別な場所からでも使えますが、方法としては大きく2つあります。

  1. いちばん外側(jQuery(){…}より外)で関数を定義する
  2. グローバル変数に代入する(window.hoge = hoge;

投稿2015/07/22 01:36

maisumakun

総合スコア146851

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pandd8

2015/07/22 02:10

ありがとうございます グローバル変数の方法も調べてみます!
guest

0

こんにちわ。

htmlから外部js内の関数呼び出しという文言でgoogle先生に聞いてみました。
一番上のサイトがまさにこの件だと思うのですが、一度確認してみてください。

投稿2015/07/22 01:32

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pandd8

2015/07/22 02:04

ありがとうございます そのページのパターンとこの場合の違い(失敗する理由)がわからなかったので途方にくれていたところでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.29%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問