🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Q&A

2回答

4801閲覧

htmlからjavascript内の関数を呼び出す方法

uma110

総合スコア4

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

1グッド

2クリップ

投稿2019/12/30 10:04

編集2019/12/30 18:46

前提・実現したいこと

html内のbody内からjavascript内の関数を呼び出したいのですが、

Uncaught ReferenceError: openNote is not defined
at HTMLInputElement.onclick (index.html:27)

というエラーメッセージが出てしまいます。

html内の
headタグの中で

<script type="text/javascript" src='main.js'></script>

main.jsを呼び出し、
bodyタグ中でmain.js内の関数
openNote(){}
を呼び出そうとしたのですが、

<input id="opennote-button" type="button" onclick="openNote()" value="Open Note">

では、何か記述がおかしいのでしょうか?

openNote関数はグローバル関数にしていますが、なぜか呼び出しがされません。

headタグに直接javascriptを記述した場合、上記の呼び出しでしっかり呼び出してくれるんですが、外部からのjsの呼び出しと変わってくるのはなぜでしょうか?

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>NoteWeb-App</title> <!-- call jquery frame --> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> <!-- update the version number as needed --> <script defer src="/__/firebase/7.6.0/firebase-app.js"></script> <!-- include only the Firebase features as you need --> <script defer src="/__/firebase/7.6.0/firebase-auth.js"></script> <script defer src="/__/firebase/7.6.0/firebase-database.js"></script> <script defer src="/__/firebase/7.6.0/firebase-messaging.js"></script> <script defer src="/__/firebase/7.6.0/firebase-storage.js"></script> <!-- initialize the SDK after all desired features are loaded --> <script defer src="/__/firebase/init.js"></script> <script type="text/javascript" src='main.js'></script> </head> <body> <h1>Hello</h1> <div id="user-name">No-User</div> <input id="login-button" type="image" src="UI/signinImage.png" alt="LOGIN"> <br> <input id="opennote-button" type="button" onclick="openNote()" value="Open Note"> </body> </html>

var signinCompleted = false;

function openNote() {
console.log("open judge -> "+signinCompleted)
if (signinCompleted) {
location.href = "./note.html";
}else{
console.log("Signin if you want to open note");
}
}

window.onload = function () {
var loginButton = document.getElementById("login-button");
var username = this.document.getElementById("user-name");

loginButton.addEventListener("click", event => {
var provider = new firebase.auth.GoogleAuthProvider();
this.console.log("aaa");
firebase.auth().signInWithPopup(provider).then(function (result) {
console.log("func on");
signinCompleted = true;
username.innerHTML = result.user.displayName;
// This gives you a Google Access Token. You can use it to access the Google API.
var token = result.credential.accessToken;
// The signed-in user info.
var user = result.user;
})
.catch(function (error) {
console.log(error);
// Handle Errors here.
var errorCode = error.code;
var errorMessage = error.message;
// The email of the user's account used.
var email = error.email;
// The firebase.auth.AuthCredential type that was used.
var credential = error.credential;
// ...
});
});
};

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

別のjsファイルを作り、試したところ、普通に関数を呼び出すことができました。
firebaseのmain.jsが何か引っかかっているようです。
microsoft edgeでは、main.jsでもできたのに対して、chromeでローカルサーバーで動かしてみると、上記のような事になるところまでは発見しましたが、それ以上はよく分かりません。

DrqYuto👍を押しています

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

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

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

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

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

javahack

2019/12/30 10:10

main.jsが正しく読み込まれていることは確認しましたか?
uma110

2019/12/30 11:15 編集

同スクリプトにて、googleのfireframeにてauth認証のスクリプトも入れてますが、それはできているので、読み込みはできているはずです。
takuhito_hihara

2019/12/30 12:57

これだけでは回答が難しいので具体的なHTML、CSSを提示していただけると助かります。
uma110

2019/12/30 13:20

htmlとjavascriptを書きました。 cssは使っていません。 お願いします><
kei344

2019/12/30 13:38

質問文のコードはそれぞれコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。
guest

回答2

0

https://codepen.io/takuhito-h/pen/mdyByYa

上記のコードをcodepenで実行してみましたが、openNoteは実行できてますね。
やはりmain.jsの読み込みがうまくいっていないのでは?

投稿2019/12/30 14:45

takuhito_hihara

総合スコア142

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

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

0

main.jsがリードできてるかどうかは、main.jsのコードの先頭にalert()を書いて、ブラウザ表示した時に、アラートが表示されるかで判断できます。

気になる点としては…
srcの値をダブルクォーテーションで囲んで試してみてください。

src='main.js' → src="main.js"

以上

投稿2019/12/30 14:45

KazuSaka

総合スコア640

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問