teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

質問内容の変更

2021/09/01 16:28

投稿

Leo_Cat
Leo_Cat

スコア0

title CHANGED
@@ -1,1 +1,1 @@
1
- Rails6 onclick関数呼び出しができない
1
+ Rails6 jsファイル読み込み
body CHANGED
@@ -1,9 +1,64 @@
1
+ rails初心者です。
2
+ ビューへのjsファイルの適用の練習として
1
- rails6て、app/javascript/packsの中に作成したjsファイルに関して、onclickで関数呼び出そうとしても発火しません。
3
+ 1.各ビューjavascript_pack_tag記述
2
- [https://teratail.com/questions/343393]
4
+ 2.application.jsにimport "./test.js"
3
- こちら方で類似の質問があり、解決法と同様のことをまねてみた結果、うまくいきました。しかし、なぜうまくいったのか、なぜこの方法だとうまくいったのかが分かりません。
5
+ 2つ試しました。
4
6
 
5
- またではビューファイルに個別にjavascript_pack_tagを適用して読み込したがapplication.jsにimportして全体にjsファイルを適用させた結果、またonclick関数発火しませんでした(上の解決策のようにwindow.メソッドという形で記述していても、です)
7
+ しかし1では正しくjsファイル読み込ま機能してたが、2では計算ボタンを押ても何も反応が起こりません。
8
+ 今回使用したjsファイル(test.js)及びhtml.erbファイルは以下です。
9
+ 原因・解決策が分かる方、ご教示いただけますと幸いです。
6
10
 
11
+ ```test.js
12
+ let bmiform = document.getElementById("bmiIndex");
13
+ let comment = document.getElementById("evil");
7
- プログラミングは初心者ですので上のリンクの解決策においてもラッピング、グローバル領域などといった調べても詳細なことが出てこない単語が並んでいて理解ができません。
14
+ const calcbtn = document.getElementById("calcbtn");
8
15
 
16
+ function BMIcalc(){
17
+ let $h = document.getElementById("hform");
18
+ let $w = document.getElementById("wform");
19
+ let h = $h.value;
20
+ let w = $w.value;
21
+ let Th = Number(h)/100;
22
+ let bmires = Number(w)/(Th*Th);
23
+ let BMI = bmires.toFixed(2);
24
+ bmiform.textContent = BMI;
25
+ if(BMI >= 30){
26
+ comment.textContent = "☆肥満☆";
27
+ comment.className = "fat";
28
+ }
29
+ else if(BMI < 30 && BMI >= 22){
30
+ comment.textContent = "普通";
31
+ comment.className = "medium";
32
+ }
33
+ else{
34
+ comment.textContent = "痩せ";
35
+ comment.className = "smart";
36
+ }
37
+ }
38
+
39
+ calcbtn.addEventListener("click", BMIcalc);
40
+ ```
41
+
42
+ ```test.html.erb
43
+ <div class="wrapper">
44
+ <h2>
45
+ BMI自動計算機
46
+ </h2>
47
+ <div id="flame_1">
48
+ <div id="height">身長</div>
49
+ <input type="text" id="hform" value="">cm
50
+ </div>
51
+ <div id="flame_2">
52
+ <div id="weight">体重</div>
53
+ <input type="text" id="wform" value="">kg
54
+ </div>
55
+ <div id="calc">
56
+ <button type="button" id="calcbtn">計算</button>
57
+ </div>
58
+ <div id="result">
9
- なぜ上のリンクのようにするとonclickが発火できたのか、そしてjsファイルを全体に適用させようとした際にonclickがまた発火できなくなったのは何故なのか、ご教示いただけますと幸いです。
59
+ <span> BMI:</span><span id="bmiIndex"></span>
60
+ </div>
61
+ <div id="evil" class="">
62
+ </div>
63
+ </div>
64
+ ```