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

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

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

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

Q&A

解決済

2回答

2354閲覧

onchange 2回目にUncaught TypeError

ghu_ggu

総合スコア8

JavaScript

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

0グッド

0クリップ

投稿2017/01/22 11:38

初心者です。
この状態で3つのselectを変えていくのですが、1回目はちゃんとfunction change()が実行されconsoleに結果が出てきます。ですが2回目からはconsoleにUncaught TypeErrorが出てきてfunctionが見つからないと返されます。
エラーを調べても直せなかったため質問させていただくことにしました。
2回目でもエラーが出ないようにしたいです
ご教授願います。

html

1<table> 2 <tbody> 3 <form name="attack_g_d"> 4 <tr> 5 <td>ローマ字</td> 6 <td> 7 <select name="weapon" onchange="change()"> 8 <option value="0" selected>ローマ字</option> 9 <option value="0.1">A</option> 10 <option value="0.2">B</option> 11 </select> 12 </td> 13 </tr> 14 <tr> 15 <td>数値</td> 16 <td> 17 <label class="select-wrap"> 18 <select name="m_a_up" class="main" onchange="change()"> 19 <option value="0" selected>0</option> 20 </select> 21 </label> 22 . 23 <label class="select-wrap"> 24 <select name="s_a_up" class="sub" onchange="change()"> 25 <option value="0" selected>0</option> 26 </select> 27 </label> 28 </td> 29 </tr> 30 </form> 31 </tbody> 32 </table>

javascript

1wep_data = [ 2 ['A',28.0,0.1], 3 ['B',35.0,0.2], 4 ] 5function change() { 6 wep_name_val = document.attack_g_d.weapon.value; 7 main_a = document.attack_g_d.m_a_up.value; 8 sub_a = document.attack_g_d.s_a_up.value; 9 10 for (var i = 0; i < wep_data.length;) { 11 wep_val = wep_data[i][2]; 12 if (wep_name_val != wep_val) { 13 i++; 14 } else { 15 wep_name = wep_data[i][0]; 16 damage_o = wep_data[i][1]; 17 damage = damage_o.toFixed(1); 18 19 html_add = "\t" + '<tr>' + "\n"; 20 html_add += "\t" + '<td>' + wep_name + '</td>' + "\n"; 21 html_add += "\t" + '<td>' + damage + '</td>' + '\n'; 22 if (damage > 0) { 23 d_n = Math.ceil(100 / damage); 24 } else { 25 d_n = 0; 26 } 27 html_add += "\t" + '<td>' + d_n + '</td>' + '\n'; 28 attack_g = (main_a * 10) + (sub_a * 3); 29 g_d = ((0.99 * attack_g) - Math.pow((0.09 * attack_g), 2)) / 100; 30 z = 1 + g_d; 31 a_g_d = Math.floor((damage * z) * 1000) / 1000; 32 if (Math.ceil(100 / a_g_d) < Math.ceil(100 / damage) && damage < 100) { 33 max_a_g_d = 100 / (Math.ceil(100 / damage) - 1); 34 if (max_a_g_d == 25.0 || max_a_g_d == 50.0 || max_a_g_d == 100) { 35 max_a_g_d -= 0.1; 36 } 37 a_g_d = max_a_g_d.toFixed(1); 38 } 39 html_add += "\t" + '<td>' + a_g_d + '</td>' + '\n'; 40 41 html_add += "\t" + '</tr>'; 42 console.log(html_add); 43 44 break; 45 } 46 } 47} 48

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2017/01/22 12:21

ブラウザは何を利用しているのでしょうか?当方Chromeでは問題なく表示されております
ghu_ggu

2017/01/22 12:25

私もChromeを使用しています。ですが質問の通り2回目以降エラーになってしまいます。chromeのバージョンは最新です
guest

回答2

0

自己解決

自己解決いたしました
関数の名前が他の要素の名前と被っていたためエラーが出てきていたのか、関数の名前を変えたらエラーが出なくなりました。記述したコード外の場所にあったため正確な情報提供ができていなかったと思います。すいませんでした。ご回答してくださったお二方ありがとうございました!

投稿2017/01/22 12:37

ghu_ggu

総合スコア8

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

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

0

そのJSのコードですが、外側にfunction() {} とかで囲まれていません?

投稿2017/01/22 12:19

turbgraphics200

総合スコア4267

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

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

ghu_ggu

2017/01/22 12:26

囲まれてないです・・・。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問