質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.37%
JavaScript

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

ASP.NET MVC 4

ASP.NET MVC4は、MVCパターンを利用して、高度なテスト機能と保守機能を備えた Web アプリケーションを開発するためのフレームワークです。

Q&A

解決済

3回答

72965閲覧

外部jsファイルから別の外部jsファイルの関数を呼び出したい.

shikasama

総合スコア163

JavaScript

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

ASP.NET MVC 4

ASP.NET MVC4は、MVCパターンを利用して、高度なテスト機能と保守機能を備えた Web アプリケーションを開発するためのフレームワークです。

0グッド

4クリップ

投稿2016/08/28 02:12

編集2016/08/28 03:37

観覧ありがとうございます.

asp.net mvc4 ,C#でプロジェクトの改修をしています.
外部jsファイルから別の外部jsファイルの関数を呼び出したいです,
ご教示ください.

調べて以下の方法を試しましたがうまくできませんでした.

javascript

1###hoge.js 2function hogefunction(form) { 3 document.write("<script type='text/javascript' src='piyo.js'></script>"); 4 window.onload = function(){piyofunction(form, url);}; 5}

詳しいコードについては会社からでないと見れないので今はわかりません.
申し訳ありません.
覚えている限り下記に示します.

javascript

1function piyo.js(form,url) { 2 // フォームとurlを指定してwindow.openでurl先を開く処理. 3 window.open(url); 4}

hoge.jsを使用しているhtmlは

html

1 <head> 2// 略 3 <script type="text/javascript" src="../Scripts/hoge.js"></script> 4</head> 5<body> 6// 略 7 <input type="button" value="button" onClick="hogefunction(document.forms[0], '../Views/a.cshtml')"> 8</body>

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

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

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

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

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

MakeNowJust

2016/08/28 02:20

piyo.jsの内容も教えてください。 それと、コードなどはMarkdownのコードブロックを使って見易くしてもらえると助かります。 https://teratail.com/help
MakeNowJust

2016/08/28 02:22

些細な話ですが、観覧という言葉はこの文脈で使うことはまず無いと思います。閲覧が適切かと思いますが、謝辞は求めていないので書かなくても構いません。
MakeNowJust

2016/08/28 02:23

可能ならば、hoge.jsをscriptタグで読み込んでいるHTMLファイルも教えてください
guest

回答3

0

ベストアンサー

JavaScriptで動的に読み込む必要はあるのか?

膨大なソースコードでない限り動的に読み込む必要はないと自分は思います。
htmlに2つScriptタグを使って読み込ませればいいと思いますよ。

html

1<script src="piyo.js"></script> 2<script src="hoge.js"></script>

また読み込む順番に注意が必要です。
hoge.jsからpiyo.js内の関数を呼び出したい場合は、事前にpiyo.js内で定義されている関数が作られている必要があります。その場合、hoge.jsより先に読み込まないといけないので注意してください。

#どうしても動的に読み込みたい

私達は貴方の今の状況が分からないので一応方法をお教えしておきます。
基本的にはjQuery等使うといいと思います。

また状況は違うと思うのですが、node.jsであればrequire()と言う関数を使って読み込む事も可能です。

■jQueryを使って読み込む方法

js

1$.getScript("piyo.js");

この様に記述するだけで読み込めます。またコールバック関数と言うので読み込んだ後に処理したい事を記述する事も可能です。

js

1$.getScript("piyo.js" function(){ 2 //code.. 3});

■node.jsの場合の読み込む方法

js

1var script = require("piyo.js");

node.jsを使っていて読み込む場合はこの様に記述出来ます。

主に代表的な読み込む方法をご紹介しました。

投稿2016/08/29 02:04

fukumi822

総合スコア228

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

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

fukumi822

2016/08/29 02:08

補足 : 他の方へのコメントでの「htmlファイル側で2つのjsファイルを読み込むとjsファイルから他のjsファイルの関数を呼べるようになるのでしょうか?」 と言う質問に対して、 基本的に読み込み元のHTMLをベースにJavaScriptは動作します。 HTMLで読み込んだ物全てを各JavaScriptファイルから操作する事が可能になります。 またJavaScriptはHTMLファイル上で連結させられるので、読み込む順番さえ間違えなければ失敗はしません。
shikasama

2016/08/29 06:20

fukumi822様 ご回答ありがとうございます。 読み込む順番を確認してみましたところ、順番が逆になっていたみたいでした。 ```html <script src="piyo.js"></script> <script src="hoge.js"></script> ``` を ```html <script src="hoge.js"></script> <script src="piyo.js"></script> ``` に直すことで実現できました。ありがとうございます。
guest

0

document.writeを使って動的にJavaScriptを読み込む方法はあまり推奨し、document.writeを呼び出すタイミングによっては問題が起こることがあります。また、DOMを制御してスクリプトを読み込むのもそこそこ難しいです。

また、質問者様のコードを見た限り、スクリプトをプログラム的にロードしようとしていますが、これは本当に必要なことなのでしょうか?
HTMLファイルに複数の<script>タグを並べて複数のJavaScriptファイルを読み込むのが無難かと思います。

HTML

1<script src="piyo.js"></script> 2<script src="hoge.js"></script>

投稿2016/08/28 02:27

編集2016/08/28 03:06
MakeNowJust

総合スコア545

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

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

shikasama

2016/08/28 03:42

情報不足で申し訳ありません.質問文を修正いたしました. htmlファイル側で2つのjsファイルを読み込むとjsファイルから他のjsファイルの関数を呼べるようになるのでしょうか?
MakeNowJust

2016/08/28 03:49

恐らくは呼べるはずです。呼べなければ理由を考えます。
shikasama

2016/08/28 04:24

明日,会社で試してみようと思います. ありがとうございます.
guest

0

いろいろ検証してみたところ以下の方法が一番安定していて、動作の仕組みも理解しやすいと思います。

javascript

1// このコードはIE7以降有効です 2var req = new XMLHttpRequest(); 3req.open("GET", "読み込むjsファイル", false); 4req.send(""); 5 6// 上のreq.openでは同期通信(false)を指定しているので以下はレスポンスを待ってから実行される。 7// 文字列をjavascriptとして実行。 8eval(req.responseText);

投稿2016/08/28 02:40

Diawel

総合スコア190

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

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

MakeNowJust

2016/08/28 02:50

XHRの同期通信は現在非推奨ですし、描画をブロックするのでUXにも影響があります。あまり褒められた方法では無いかと思います。
GenbuHase

2016/08/28 02:53

XHRを使用するならばfalseをtrueにして、onloadで処理してあげるのが最適かと思います。
Diawel

2016/08/28 02:55

そうでしたか。 僕の場合は質問されたことがちゃんとできるということを第一に考えているので(^^)
GenbuHase

2016/08/28 03:01

確かに考え方から身につけていった方が良いですね。 流石です( ´∀`)b
shikasama

2016/08/28 03:47

masaya_46neko様 ご教示ありがとうございます. XMLHttpRequestというものを初めて見ましたので, 調べてから明日会社で実施してみようと思います. ありがとうございました.
shikasama

2016/08/28 03:49

GenbuHase様 masaya_46neko様から提示された方法を試した後に試してみようと思います. ありがとうございます.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問