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

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

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

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

Q&A

解決済

3回答

619閲覧

JavaScriptに詳しい方教えてください

ajh

総合スコア46

JavaScript

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

0グッド

1クリップ

投稿2021/08/18 05:52

編集2021/08/18 05:55

divのhello文字をクリック

input textに置き換え

ENTER押したらinput textのvalueのdivにする

これを繰り返したいんですがなぜかddがundefinedになります

原因がわかる方いらっしゃいますでしょうか?

<div id="d">hello</div> <script> d.addEventListener('click', function() { d.innerHTML='<input id="d" type="text" value="'+this.innerText+'" onkeydown="k()">'; }, { once: true }); function k(){ if (event.keyCode == 13){ dd=document.getElementById('d').value; d.innerHTML='<div id="d">'+dd+'</div>'; } }; </script>

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

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

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

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

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

guest

回答3

0

IDは同ページ内の重複不可

投稿2021/08/18 05:58

m.ts10806

総合スコア80875

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

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

ajh

2021/08/18 06:00

innerHTMLで置換するともとあったidはDOM上から消えてるんではないでしょうか?
yambejp

2021/08/18 06:19

> もとあったidはDOM上から消えてる よくご自身のソースを見返してみてください id=dのdivにid=dのテキストボックスを挿入しています
ajh

2021/08/18 06:32

appendChildならわかりますがinnerHTMLは置換だから前の存在が消えて新たなdが誕生するのではないんですか?
maisumakun

2021/08/18 06:33

「中身だけ」書き換えます。外側の<div id="d">は変化しません。
m.ts10806

2021/08/18 08:33 編集

推論や自身の想いではなく、JavaScriptで書き換えられたHTMLを確認してください。 ブラウザのデベロッパーツール。 百聞は一見に如かず。 プログラムは書いた通りにしか動かない。
ajh

2021/08/18 15:57

ドヤ顔で「プログラムは書いた通りにしか動かない」とかきもい眼鏡
m.ts10806

2021/08/18 23:11

無関係の暴言として通報しました。 「思った通りには動かない」を直接的に書いただけでドヤ顔と解釈してしまうのは非常に残念。
m.ts10806

2021/08/19 01:24

私は先にコメントいただいている2名には及びませんし勉強させてもらってる部分も多いですが、業務に困らない程度にはプログラミングできます。 なので、ドヤ顔だのキモいだの増して差別的に眼鏡を使うような人にとやかく言われる筋合いはありません。 回答に間違いがあるなら稚拙な単語を並べた暴言に頼らずきちんと論理的に根拠を以て指摘してください。 id重複の解決だけで本件が解決するとは限りませんが、重複してる時点でJavascriptは正常に動かないので、重複の解決は大前提です。 htmlやcssのことも考慮しなければならないので思ってる以上に難しいんですよ。 だから「書いたとおりにしか動かない」 これを知ってるか知ってないか、受け入れているかどうかでは大違いです。 発言からその認識がないものと判断したためコメントしました。 わざわざ暴言吐かなければならないほどの状況ですか?
退会済みユーザー

退会済みユーザー

2021/08/19 18:29

私は「プログラムは書いた通りにしか動かない。」は明らかに不必要であると考える。m.ts10806は傲慢である。
m.ts10806

2021/08/19 21:49

プログラミングにおける本質部分を根拠なしに「明らかに不必要」と決めつける理由は?いずれにしても何度追い出されても執拗に戻ってくる迷惑ユーザーとして通報しました。
guest

0

javascript

1<div id="d">hello</div> 2<script> 3d.addEventListener('click', function(e) { 4 if(e.target.nodeName=="DIV"){ 5 d.innerHTML=`<input type="text" value="${e.target.textContent}" onkeydown="k(this)">`; 6 } 7},false); 8function k(obj){ 9 if (event.keyCode == 13){ 10 d.textContent=obj.value; 11 } 12}; 13</script>

投稿2021/08/18 06:18

yambejp

総合スコア116724

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

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

ajh

2021/08/18 06:23

こんにちは。やりたかったことでした。 なぜ私のソースではundefineになったのかも教えていただけますでしょうか 指摘通り「IDは同ページ内の重複不可」が原因だったでしょうか?
yambejp

2021/08/18 06:42

まずは同じidを指定してるところがだめで そのうえでバブリング・キャプチャリングの問題があるようです でバグモードでDOMの状態を確認しながらテストしてみるとわかりやすいかもしれません
guest

0

ベストアンサー

コード中の innerHTML をすべて outerHTML に置き換えると質問者さんの意図通りのコードになると思います。

d.innerHTML = ... は、要素 d の子ノード(開始タグと終了タグの間)を置き換えます。d.outerHTML = ... は、要素 d 自身を置き換えます。

投稿2021/08/18 06:48

編集2021/08/18 07:01
int32_t

総合スコア21695

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問