質問するログイン新規登録

Q&A

解決済

2回答

769閲覧

JSでtextareaの隠れた部分を含めた高さを取得したい

joywont

総合スコア16

JavaScript

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

HTML

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

0グッド

1クリップ

投稿2023/06/15 07:46

0

1

実現したいこと

JSでtextareaの隠れた部分を含めた高さを取得したいです。

前提

テキストエリアフォーム内に予めある情報がテキストエリア以上にあり、スクロールバーが表示している状態とします。
内部を含めると本来の高さはいくつかを調べたく、scrollHeightを取得したいです。

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

以下の方法を利用しても取得できませんでした。

js

1[js] 2const targetAreas = document.querySelectorAll(".textarea"); 3console.log(targetAreas[0].scrollHeight);0

該当のソースコード

html

1[html] 2<textarea name="textarea" id="textarea" class="textarea" cols="30"> 3testtesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttest 4</textarea> 5

試したこと

他の値は取得し表示できました。

console.log(targetAreas[0].cols); → 30

jsの記述なのか、htmlの記述なのか、そもそも取得できないのか、分からなくなってハマってしまいました。
どなたか分かる方いらっしゃいましたらご教授お願い致します。

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

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

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

int32_t

2023/06/15 07:54

現在の質問文のHTMLやJavaScriptにはとくに問題は見られません。 問題を再現できるよう、完全なHTML(とくにどうやってJavaScriptを実行しているか)や再現できる環境を開示してください。
退会済みユーザー

退会済みユーザー

2023/06/15 07:58

以下の記事は参考になりませんか? JavaScriptでtextareaの高さを計算して自動で可変させる方法 https://web-dev.tech/front-end/javascript/textarea-auto-height/ ハズレだったらすみません。
Lhankor_Mhy

2023/06/15 08:15

当方の環境では、ご提示のコードで問題なく動作しています。0ではなかったです。
joywont

2023/06/15 08:48

int32_t さん、お世話になります。 すいませんが、ほぼそのままなんです。 <textarea name="textarea" id="textarea" class="textarea" cols="30"> testtesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttest </textarea> <script> const targetAreas = document.querySelectorAll(".textarea"); console.log(targetAreas[0].scrollHeight); </script> 順番が違うのでしょうか? targetAreas[0] だけをconsole.logで表示し、デベロッパーツールで確認していくと確かに数値は確認できるのですが、targetAreas[0].scrollHeight でconsole.logで出力すると確かに0なのです。
joywont

2023/06/15 08:51

Lhankor_Mhy さん、お世話になります。 リンクご紹介ありがとうございます。 しかし、既に調べたサイトでした。 元々取得が0なのでこちらは利用できませんでした。
joywont

2023/06/15 08:59

Lhankor_Mhy さん、お世話になります。 そちらでは問題ないのですね、ありがとうございます。 こちらはブラウザの関係かあるのですかね? FirefoxとChromeで見てみたのですが、同じでした。
Lhankor_Mhy

2023/06/15 09:03

Firefoxで試しましたので、ブラウザに問題ではないかもしれないですね。
joywont

2023/06/15 09:06

Lhankor_Mhy さん、そうなのですね。 そちらの環境では問題なく、こちらでは取得できないというのは不思議な現象ですね。 検証ありがとうございます。
Lhankor_Mhy

2023/06/15 09:08

https://jsfiddle.net/Lhankor_Mhy/umbhywrk/ こちらも0になりますか? なるのであれば環境の問題、 ならないのであれば提示されていない部分のコードの問題かと思います。
int32_t

2023/06/15 09:12

Re: 17:48 のコメント 本当にそのコードだけだったら0ではない数値がコンソールに出ると思います。他の要素やスタイルシートはないんでしょうか? なんにせよ、window.onload = () => { ... } でコードを囲むと症状が変わるかもしれませんね。
joywont

2023/06/15 09:22

ちなみに、以下のような形にしてみましたら、 console.log(targetAreas[0].cols); → 30 console.log(targetAreas[0].textLength); → 664 console.log(targetAreas[0].scrollHeight); → 0 console.log(targetAreas[0].scrollWidth); → 0 とコンソールでは上記のように出力されました。なぜかscrollと付くものは0になってしまいます。 デベロッパーツールで見てみると scrollHeight: 384 ​scrollWidth: 216 と確認できるのですが。不思議ですね。
yambejp

2023/06/15 09:56

ちなみに、OSやブラウザの種類やバージョンはなんでしょう?
Lhankor_Mhy

2023/06/16 00:37

なんとなくですが、CSSで display:none となってるとか、そういう話のような気がしますね。
joywont

2023/06/16 01:02

yambejp さん、お世話になります。 以下のようになります。 Firefox 114.0.1 Chrome 114.0.5735.134 OS Windows10
yambejp

2023/06/16 01:04

Lhankor_Mhyさん なるほど「display:none」の要素はgetComputedStyleで「auto」になるのですね。 ちょっと意識になかったです。感謝
joywont

2023/06/16 01:11

Lhankor_Mhyさん、 displayをblock、Flex、Tableなど色々と試してみましたが同じく数値は0でした。
yambejp

2023/06/16 01:14

TO:joywontさん 私の回答コメントにあるcodepenでも確認できませんか?
joywont

2023/06/16 02:01

yambejp さん、いえ、確認させていただき、動作することを確認しました。ありがとうございます。 これでブラウザは問題ないということですよね。 色々と用意していただき感謝いたします。
yambejp

2023/06/16 02:03

質問へのコメントに対してLhankor_Mhyさんがご指摘されているように textareaの設定に問題があるのだと思います。 現状提示されているソースでは判断できないので joywontさんもcodepenなど動作の確認できる場所にソースをあげるなど 検討ください
joywont

2023/06/16 02:20

yambejp さん、ありがとうございました。 また、この症状に関して色々とお話をいただきました多くの方々にも深く感謝いたします。 お話いただきましたように、textareaあたりからまた見直してみようと思います。
guest

回答2

0

自己解決

結局解決できませんでしたのでこのままにしておきます。
いずれ解決方法が見つかればご報告したいと思います。
手伝っていただいた皆様ありがとうございました。

投稿2023/06/16 09:19

編集2023/06/16 09:21
joywont

総合スコア16

0

参照タイミングがおかしいだけでは?

javascript

1<script> 2window.addEventListener('DOMContentLoaded', ()=>{ 3 const t = document.querySelectorAll(".textarea")[0]; 4 console.log(getComputedStyle(t).height); 5 console.log(t.clientHeight); 6 console.log(t.offsetHeight); 7 console.log(t.scrollHeight); 8}); 9</script> 10<textarea id="t1" class="textarea" cols="30"> 11 12testtesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttest 13 14</textarea>

調整

javascript

1<script> 2window.addEventListener('DOMContentLoaded', ()=>{ 3 const t = document.querySelectorAll(".textarea")[0]; 4 const calc=()=>{ 5 height.textContent=getComputedStyle(t).height; 6 clientHeight.textContent=t.clientHeight; 7 offsetHeight.textContent=t.offsetHeight; 8 scrollHeight.textContent=t.scrollHeight; 9 }; 10 calc(); 11 btn.addEventListener('click',()=>{ 12 console.log(1) 13 t.value="\n"+"test".repeat(165)+"\n\n"; 14 calc(); 15 }); 16 const resizeObserver = new ResizeObserver((entries) => { 17 calc(); 18 }); 19 resizeObserver.observe(t); 20}); 21</script> 22<textarea class="textarea" cols="30"></textarea> 23<div>height:<span id="height"></span></div> 24<div>clientHeight:<span id="clientHeight"></span></div> 25<div>offsetHeight:<span id="offsetHeight"></span></div> 26<div>scrollHeight:<span id="scrollHeight"></span></div> 27<input type="button" value="btn" id="btn">

投稿2023/06/15 09:08

編集2023/06/15 10:07
yambejp

総合スコア118405

joywont

2023/06/15 09:27

回答ありがとうございます。 頂いたソースを利用しましたところ、 auto 0 0 0 という出力となりました。 頂いたソースでもscrollHeightは取得できませんでした。
yambejp

2023/06/15 10:01 編集

調整版アップしておきました textareaのリサイズなどでも反応ないか確認してみてください 参考 https://codepen.io/yambejp/pen/QWJyOQE
joywont

2023/06/16 01:17

参考ソースありがとうございます。 先ほど自分の方に追加してみたところ、height is not defined というエラーが発生して、サンプルページのような結果が出来ませんでした。 お忙しい中用意していただきありがとうございました。
yambejp

2023/06/16 01:20

> 先ほど自分の方に追加してみた そうではなく、codepenのサイトにアクセスして数字が表示されるかどうかを聞いています codepenはOKでご自身のサイトがダメなら、導入の仕方がおかしいのでしょう
joywont

2023/06/16 01:59

> codepenのサイトにアクセスして数字が表示されるかどうかを聞いています はい、紹介していただいたcodpenのサイトで実際に作動してることを確認させていただいてます。 そして、申し訳ございません。<div>height:<span id="height"></span></div>の設置が抜けておりました。 追加するとエラー表示はなくなりましたが、数字の表示結果はいかのようになりました。 height:auto clientHeight:0 offsetHeight:0 scrollHeight:0
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.29%

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

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

質問する

関連した質問