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

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

詳細はこちら
JavaScript

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

関数

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

解決済

1回答

1272閲覧

functionを活用した時に、「Uncaught ReferenceError: value is not defined」と表示される

tenten11055

総合スコア67

JavaScript

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

関数

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

0クリップ

投稿2019/11/03 11:20

#やりたいこと
JavaScriptを勉強中です。
本の内容を応用して、同じ内容の処理をfunctionで定義して呼び出したいのですが、
ブラウザのコンソールに(index):117 Uncaught ReferenceError: idName is not defined
出てしまいます。
原因が分からないため、教えていただければ幸いです。
テーマは非同期通信です。

#ソース

json

1[ 2 {"id":"js", "crowded":"yes"}, 3 {"id":"security", "crowded":"no"}, 4 {"id":"aiux", "crowded":"middle"} 5] 6

html

1 <section> 2 <ul class = 'list'> 3 <li class = 'seminar' id = 'js'> 4 <h2>JavaScript勉強会</h2> 5 <p class = 'check'>空き席状況を確認</p> 6 </li> 7 <li class = 'seminar' id = 'security'> 8 <h2>セキュリティ対策講座</h2> 9 <p class = 'check'>空き席状況の確認</p> 10 </li> 11 <li class = 'seminar' id = 'aiux'> 12 <h2>AIを利用したUX設計</h2> 13 <p class = 'check'>空き席状況を確認</p> 14 </li> 15 </ul> 16 </section>

css

1//装飾用ーーーーーーーーーーーーーーーーーーーーーー 2 .list{ 3 overflow: hidden; 4 margin: 0; 5 padding: 0; 6 list-style-type: none; 7 } 8 .list h2{ 9 margin: 0 0 2em 0; 10 font-size: 16px; 11 text-align: center; 12 } 13 .seminar{ 14 float: left; 15 margin: 10px 10px 10px 0; 16 border: 1px solid #23628f; 17 padding: 4px; 18 width: 25%; 19 } 20 .check{ 21 margin: 0; 22 padding: 8px; 23 font-size: 12px; 24 color: #ffffff; 25 background-color: #23628f; 26 text-align: center; 27 cursor: pointer; 28 } 29 30//下記をプログラムで使用するーーーーーーーーーーーーーーーーーーーーーーーーーーー 31 .red{ 32 background-color: #e33a6d; 33 } 34 .green{ 35 background-color: #7bc52e; 36 } 37 .yellow{ 38 background-color: yellow; 39 }

js

1 'use strict'; 2 3 $(document).ready(function(){ 4 //ファイルの読み込み 5 $.ajax({url: 'data.json', dataType: 'json'}) 6 .done(function(data){ 7 data.forEach(function(item, index){ 8 if(item.crowded === 'yes'){ 9 // const idName = '#' + item.id; <- 応用前 10 createIdName(item); //<- 応用後 11 $(idName).find('.check').addClass('crowded'); 12 }else if(item.crowded === 'middle'){ 13 // const idName = '#' + item.id; <- 応用前 14 createIdName(item);//<- 応用後 15 $(idName).find('.check').addClass('middle'); 16 } 17 }); 18 }) 19 .fail(function(){ 20 window.alert('読み込みエラー'); 21 }); 22 }); 23 24 //クリックされたら空き席状況を確認 25 $('.check').on('click', function(){ 26 if($(this).hasClass('crowded')){ 27 $(this).text('残席わずか').addClass('red'); 28 }else if($(this).hasClass('middle')){ 29 $(this).text('微妙!').addClass('yellow'); 30 }else{ 31 $(this).text('お席あります').addClass('green'); 32 } 33 }); 34 35 //応用のため関数を定義 36 function createIdName(item){ 37 const idName = '#' + item.id; 38 };

定義した関数、createIdNameを使わずに、応用前の状態にするとエラーが出ずに正しく動作します。
宜しくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

こんにちは

以下の関数

javascript

1function createIdName(item){ 2 const idName = '#' + item.id; 3};

の本体で宣言されている変数 idName は、関数の外からは参照できないです。なので、

javascript

1$(idName).find('.check').addClass('crowded');

のところで、ご質問にある、idName is not defined というエラーになります。
修正の一案としては、関数createIdName で、

javascript

1function createIdName(item){ 2 const idName = '#' + item.id; 3 return idName; // この行を追加 4};

上記のように、 idName を return するようにしておいて、createIdName を使っている下記

javascript

1createIdName(item); 2$(idName).find('.check').addClass('crowded');

を、

javascript

1$(createIdName(item)).find('.check').addClass('crowded');

のように修正するといかがでしょうか?

参考になれば幸いです。

投稿2019/11/03 11:43

jun68ykt

総合スコア9058

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

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

tenten11055

2019/11/03 15:25

ご指摘の通り試したところ、思うような結果になりました。 解説がわかりやすく大変助かりました! ありがとうございました。
jun68ykt

2019/11/03 15:26

どういたしまして。 > 思うような結果になりました。 とのことでよかったです????
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問