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

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

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

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

jQuery

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

CSS

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

Q&A

解決済

1回答

1548閲覧

jQueryでslideDown/slideUpした要素の下のブロック高さを、常にブラウザの高さに合わせたい

yukie1101

総合スコア11

JavaScript

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

jQuery

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

CSS

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

0グッド

1クリップ

投稿2021/10/20 11:24

前提・実現したいこと

CakePHPを使用して、データの検索/一覧表示画面を作成しています。
検索項目がたくさんあるので、詳細な条件についてはjQueryのslideDown/slideUp関数を使用して
任意で表示/非表示を切り替えられるようにしています。

検索結果の一覧は検索条件の下に表示されるのですが、
Excelの行列固定のような形で見せたいという要望があったので
ブラウザ上の検索条件の下を一つのブロックとし、overflow:scroll;を指定して
ボックス内でスクロールさせる、という手法を取りました。

この一覧表示が出力されているときに、検索条件で隠した状態のものを表示させたときに
検索条件のエリアの高さをouterHeight関数で取得し、切り替える度に一覧表示の高さを
設定し直す…ということをしているのですが、実際に取得できる値がslideDown/slideUpする以前の数値のようで
正しくリサイズされず、困っています。

どうにかこの問題を解決したいと思っています。
どなたか、お知恵をお借りできないでしょうか?
よろしくお願いいたします。

該当のソースコード

javascript

1 // 詳細検索見出しがクリックされたとき 2 $('#search_conditions_h').on('click', function() { 3 if ($('#search_conditions').hasClass('hidden')) { 4 $('#search_conditions').slideDown(); 5 // $('#search_conditions').slideDown(400, resize_list()); 6 $('#search_conditions').removeClass('hidden'); 7 } else { 8 $('#search_conditions').slideUp(); 9 // $('#search_conditions').slideUp(400, resize_list()); 10 $('#search_conditions').addClass('hidden'); 11 } 12 // resize_list(); 13 setTimeout(resize_list(), 5000); 14 }); 15 16 17 function resize_list() { 18 // 検索条件の縦幅を取得 19 var window_height = $(window).height(); 20 var search_condition_box_height = $('#search_condition').outerHeight(true); 21 var table_height = window_height - search_condition_box_height; 22 $('.table_height').css('height', table_height + 'px'); 23 }

試したこと

  • sildeDown/slideUp関数が完全に終わった後にリサイズするよう、setTimeout関数で実行時間を調整

→時間を極端に変更しても、特に取得できる値に影響がありませんでした

  • slideDown/slideUp関数の引数に実行時間、コールバック処理を記載

→こちらもsetTimeout同様、あまり意味がありませんでした

  • 最初に画面を表示したときにデフォルトの値を取得しておき、その値で計算していく

→ブラウザ幅を縮めたときなどの所為に対応しきれず断念しました

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

  • jQueryバージョン:3.4.1

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

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

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

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

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

guest

回答1

0

ベストアンサー

全体は見ていませんがsetTimeoutの使い方は間違っているようです。

js

1// setTimeout(resize_list(), 5000); // resize_listがこの場で実行されて返り値がsetTimeoutに登録されている 2// ↓ 3 setTimeout(resize_list, 5000);

投稿2021/10/20 13:02

kei344

総合スコア69606

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

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

yukie1101

2021/10/21 01:26

ありがとうございます! こんな初歩的なところだったとは…お恥ずかしい限りです。 本当に助かりました、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問