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

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

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

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

Q&A

解決済

2回答

442閲覧

data属性を使って表示させるdiv要素の状態を変更させる方法

_Lucia

総合スコア25

JavaScript

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

0グッド

0クリップ

投稿2023/03/10 02:37

非表示だったdiv要素の表示をさせたいです。

※data属性の活用方法を調べているのであえて直接IDを指定せずにdata属性を使います。

html

1<button data-id="typeB" onclick="click()">ここをクリックするとBが表示される</button> 2 3<div id="typeB" style="display: none;">Bが表示された</div>

javascript

1 function click(){ 2 var tb = document.querySelector('[data-id]'); 3 document.getElementById(tb.dataset.id).style.display = "block"; 4 }

ボタンクリック→クリックした要素のdata属性を変数にする→その変数を使ってIDを特定→特定した要素が表示される
という流れを実現したいのですが何故上記のコードでは何も表示されないのでしょうか。

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

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

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

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

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

guest

回答2

0

ベストアンサー

<button data-id="typeB" onclick="click()">

click という関数名を別のものに変えてみてください。

イベントハンドラ中では this がスコープとして追加されるため、click() と書くと HTMLElementclick() が選ばれてしまいます。


onclick 属性などのイベントハンドラ実行中は、シンボルは以下の順番で検索されます。

  1. イベントが起きた要素のプロパティやメソッド
  2. その所有 <form> のプロパティやメソッド
  3. document のプロパティやメソッド
  4. グローバル変数やグローバル関数

addEventListener() で登録したイベントリスナにはそういうややこしいスコープはありませんので、addEventListener() のほうがトラブルが少なくなります。

投稿2023/03/10 02:45

編集2023/03/10 02:59
int32_t

総合スコア20533

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

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

_Lucia

2023/03/10 03:04

解説ありがとうございます addEventListener()を使ってみます
guest

0

clickという関数名を変更してください

参考

javascript

1<script> 2document.addEventListener('click', e=>{ 3 const t=e.target; 4 if(t.matches('[data-id]')){ 5 document.querySelector(`#${t.dataset.id}`).style.display=null; 6 } 7 8}); 9</script> 10<button data-id="typeB">ここをクリックするとBが表示される</button> 11<div id="typeB" style="display: none;">Bが表示された</div> 12

投稿2023/03/10 02:46

編集2023/03/10 03:05
yambejp

総合スコア114372

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

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

_Lucia

2023/03/10 05:00

コードありがとうございます! 使わせていただきます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.53%

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

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

質問する

関連した質問