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

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

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

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

jQuery

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

1回答

1795閲覧

safariのみエラーが発生してしまう。

ryuki09

総合スコア3

JavaScript

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

jQuery

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

2クリップ

投稿2021/11/08 13:10

編集2021/11/08 13:25

前提・実現したいこと

ボタンを押したらページが出てくるタブメニューの部分なのですが、Chromeでは使用できるのですが、safariを使用するとエラーが発生してしまいます。

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

ReferenceError: Can't find variable: tab_list

該当のソースコード

{ const tab_list = document.querySelectorAll('.tab-menu4'); const content_box_list = document.querySelectorAll('.content-box2'); for(let i = 0;i < tab_list.length;i++){ tab_list[i].addEventListener('click', tab_check,false); } function tab_check(e){ let num; if(!e.target.classList.contains('is-active2')){ for(let i = 0; i < tab_list.length;i++){ if(tab_list[i].classList.contains('is-active2')){ tab_list[i].classList.remove('is-active2'); } } e.target.classList.add('is-active2'); for(let i = 0; i < tab_list.length;i++){ if(tab_list[i].classList.contains('is-active2')){ num = i; } } content_check(num); } } function content_check(number){ for(let i = 0; i < content_box_list.length;i++){ if(content_box_list[i].classList.contains('is-active2')){ content_box_list[i].classList.remove('is-active2'); } } content_box_list[number].classList.add('is-active2'); } }

試したこと

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

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

macbookairのm1を使用しています
safariはバージョン14.1.2です

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

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

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

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

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

yambejp

2021/11/08 13:21

使用OSとsafariのバージョンを明記ください
ryuki09

2021/11/08 13:25

申し訳ありません、今書きましたのでよろしくお願いします。
m.ts10806

2021/11/08 20:50

他者がコピペで再現できるよう、HTMLも提示してください。
FKM

2021/11/09 03:10

そのエラーはどこの行に対して示しているのでしょうか。
guest

回答1

0

ブロック内で関数定義をする場合、定数や変数のスコープ・巻き上げに注意が必要です。
Safariのバグなのか解釈の違いなのかはよく分かりませんが、同様の報告がほかでも見受けられます。
例えばブロック内で関数定義を下記のようにした場合

javascript

1{ 2 let i = 0; 3 function getNext() { 4 i ++; 5 console.log(i); 6 } 7 getNext(); 8}

SafariでのみReferenceError: Can't find variable: iとエラーが出ます。
しかし、

javascript

1{ 2 var i = 0; // letではなくvar 3 function getNext() { 4 i ++; 5 console.log(i); 6 } 7 getNext(); 8}

または

javascript

1//{ 2 let i = 0; 3 function getNext() { 4 i ++; 5 console.log(i); 6 } 7 getNext(); 8//} ブロックから外す

のようにするとSafariでも他のブラウザ同様の動作になります。

投稿2021/11/12 09:36

cerfweb

総合スコア1907

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問