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

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

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

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

Ruby on Rails 7

Ruby on Rails 7は、2021年12月に正式リリースされました。Ruby on Railsのバージョン7であり、フロントエンド開発環境を大幅に刷新。Node.jsを用いない構成がデフォルトになっています。

Q&A

解決済

1回答

1562閲覧

Rails7でJavaScriptのクリックイベントを実装

tkshp

総合スコア174

JavaScript

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

Ruby on Rails 7

Ruby on Rails 7は、2021年12月に正式リリースされました。Ruby on Railsのバージョン7であり、フロントエンド開発環境を大幅に刷新。Node.jsを用いない構成がデフォルトになっています。

1グッド

1クリップ

投稿2023/03/20 13:23

実現したいこと

Rails7のフロントエンドから、JavaScirptでボタンクリックイベントを実装したいのですが、エラーとなってしまいます。

前提

こちらの記事を参考に、
Rails7とJavaScriptを連携しました。
記事と同じように、top/indexで、JavaScriptを呼び出しています。

該当のソースコード

\app\javascript\top\index.jsで、ボタンのクリック時に呼び出したい関数を定義しました。

console.log("testA"); function OnSubmitClick(){ console.log("submit"); }

app\views\top\index.html.erbで、ボタンのクリック処理で上記の関数を指定しているのですが、

<button type="button" onclick="OnSubmitClick();" name="name" value="値">送信</button>

エラーとなってしまいます。

(index):42 Uncaught ReferenceError: OnSubmitClick is not defined at HTMLButtonElement.onclick ((index):42:74)

試したこと

JavaScriptの「testA」のログは取れているので、JavaScript自体は効いているようです。
クリック処理を効かせるにはどのようにすればよいですか?

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

Ruby on Rails7
Google Chrome

shinoharat👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

そもそもの javascript の仕様として、モジュールで定義した関数をグローバルスコープから利用することはできません。
( 参考: JavaScript モジュール | MDN

なので、HTML側に onclick を書くのではなく、 js側でイベントリスナを登録する形にすれば良いと思います。

diff:app\views\top\index.html.erb

1- <button type="button" onclick="OnSubmitClick();" name="name" value="値">送信</button> 2+ <button type="button" id="hogeButton" name="name" value="値">送信</button>

diff:app\javascript\top\index.js

1 console.log("testA"); 2 function OnSubmitClick(){ 3 console.log("submit"); 4 } 5+ document.getElementById('hogeButton').addEventListener('click', e => { 6+ OnSubmitClick(); 7+ });

投稿2023/03/22 05:24

編集2023/03/22 05:51
shinoharat

総合スコア1676

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

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

tkshp

2023/03/23 13:18

ご回答ありがとうございます。 クリック処理が効きました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問