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

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

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

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

Q&A

解決済

1回答

1557閲覧

safariだけ変数が引き継げない

taammy

総合スコア7

JavaScript

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

0グッド

0クリップ

投稿2020/06/05 16:58

Safariでの TypeError: undefined is not an object (evaluating

ハンバーガーメニュー作成中に下記のようなエラーがsafariで表示されました。
Chrome,firefoxではエラーなく動作していますがsafariだけ動作しません。
どうやら7行目のfunction btnclick()の関数内に変数iが渡っていないようなのですが、
その原因をご教授いただきたいです。

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

TypeError: undefined is not an object (evaluating 'arrow[i].classList')

該当のソースコード

var btn = document.getElementsByClassName('btn');
var arrow = document.getElementsByClassName('btn__arrow');
var detail = document.getElementsByClassName('detail');
var i;
for(let i = 0; i < btn.length; i++) {
btn[i].addEventListener('click',btnclick,false);
function btnclick(){
arrow[i].classList.toggle('is-active');
detail[i].classList.toggle('is-active');
}
}

Javascript

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

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

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

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

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

markey

2020/06/05 19:24

「7行目のfunction btnclick()の関数内に変数iが渡っていない」というのは何で判断しましたか?
m.ts10806

2020/06/05 21:12

あと、HTMLもご提示ください。再現確認ができません。 safariはWindowsですか?Macですか?
taammy

2020/06/06 03:36

to:markeyさん 7行目"function btnclick(){"の直後の行に console.log(i);を入れて確認していました。 choromeだとクリック時に数値を返しくるのですが safariだとundifinedとなってしまいます。。。
taammy

2020/06/06 03:37

to:m.ts10806さん 大変失礼いたしました。 今回は解決したためクローズさせていただきますが、 以後気をつけます。
guest

回答1

0

ベストアンサー

for の中で function つくるなら無名関数でいいのでは。

js

1for(let i = 0; i < btn.length; i++) { 2btn[i].addEventListener('click',function (){ 3arrow[i].classList.toggle('is-active'); 4detail[i].classList.toggle('is-active'); 5},false); 6}

投稿2020/06/05 23:16

kei344

総合スコア69574

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

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

think49

2020/06/05 23:22

このコードは「ループ回数分」の関数オブジェクトを生成しますが、質問者さん(@taammyさん)のコードは関数オブジェクトを「1回だけ」生成します。
kei344

2020/06/05 23:25

To: think49さん 「for の中で function を作っているのが問題なのでは」という回答ですが、どういう意図のコメントかがわかりません。
taammy

2020/06/06 03:31

To:kei344さん ご回答いただきありがとうございました! 記載いただいたもので動作致しました。 無名関数もう少し勉強します、、、
think49

2020/06/06 07:34

To: kei344 さん すみません。 質問者さんのコード function btnclick がforブロックの外にあると誤読していました。 失礼しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.38%

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

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

質問する

関連した質問