[JavaScript] ํ์ด์ง ๋ก๋ ์ textarea ์๋ ์กฐ์ (ํญ ์ ํ ๊ณ ๋ ค)
๋ฌธ์
ํ์ด์ง๊ฐ ๋ก๋๋ ๋ ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด ์ด๋ฅผ ์ถ๋ ฅํ๊ณ , ๊ทธ ๊ธธ์ด์ ๋ง์ถฐ textarea์ ๋์ด๋ฅผ ์๋์ผ๋ก ์กฐ์ ํ๋ ค๊ณ ํ๋ค.
์ด๋ฅผ ์ํด ์๋ ์ฝ๋๋ฅผ ์์ฑํ๋ค.
window.onload = function(){
// ๊ธฐ์กด ๋์ด๋ฅผ auto๋ก ์ค์ ํ์ฌ ๋์ด๋ฅผ ์๋ก ๊ณ์ฐํ๋๋ก ํจ
textarea.style.height = 'auto';
// ์๋ก์ด ๋์ด ์ค์
textarea.style.height = `${textarea.scrollHeight + 3}px`; // ํ์ ์ ์ฌ์ 3px ์ถ๊ฐ
}
ํ์ง๋ง ์ด๋ ๊ฒ ํด๋ scrollHeight๊ฐ 0์ผ๋ก ๊ณ์ฐ๋์ด ๋์ด๊ฐ ์ ๋๋ก ์กฐ์ ๋์ง ์๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒ
๋ก๋๋ ๋ scrollHeight์ ๊ตฌํ๋ ๊ฒ ์๋, ํญ์ด ์ ํ๋ ์ scrollHeight์ ๊ตฌํ๋๋ก ํ์๋ค.
1) setTimeout ์ฝ๋ฐฑํจ์ ์ฌ์ฉ
๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด setTimeout ์ฝ๋ฐฑํจ์๋ฅผ ์ฌ์ฉํด ์ง์ฐ์ ์ฃผ์ด ๋ณด์๊ณ , 1500ms ์ด์์ผ๋ก ์ค์ ํ์ ๋ ๊ฐํน ๋์ด๊ฐ ์ ์์ ์ผ๋ก ๊ณ์ฐ๋๊ธฐ๋ ํ๋ค.
๊ทธ๋ฌ๋ 1500์ผ๋ก ์ฃผ๊ธฐ์ ๋๋ฌด ๋๋ฆฐ ์๋์๋ค.
์ก์์ผ๋ก textarea์ ํญ์ด ๋ณํ๋๊ฒ ๋ค ๋ณด์๋ค.
๊ทธ๋ฆฌ๊ณ ์ฌ์ ํ ์์ ์ ์ด์ง ์์, ์์ธ์ ํ์ ํ๊ธฐ ์ํด ์ฌ๋ฌ ํ ์คํธ๋ฅผ ํด๋ณด์๋ค.
2) ํญ ์ ํ์ textarea height auto๋ก ๊ตฌํ๊ธฐ
๊ทธ๋ฌ๋ ์ค, ์ฐ์ฐํ ์ฝ๋ฐฑํจ์๊ฐ ์คํ๋๊ธฐ ์ ์, ๋ ๋ฒ์งธ ํญ์ผ๋ก ์ ํํ๋ฉด textarea์ ๋์ด๊ฐ ์ ํํ ๊ณ์ฐ๋๋ค๋ ๊ฒ์ ๋ฐ๊ฒฌํ๋ค.
๋ฐ๋ฉด, ์ฒซ ๋ฒ์งธ ํญ์ ๊ณ์ ๋จธ๋ฌผ๋ฌ์์ผ๋ฉด ์ฌ์ ํ 0์ผ๋ก ๊ณ์ฐ๋์๋ค.
์ฒซ ๋ฒ์งธ ํญ์ ๋จธ๋ฌผ๋ฌ์๋ ๊ฒฝ์ฐ)
๋ ๋ฒ์งธ ํญ์ ๋จธ๋ฌผ๋ฌ์๋ ๊ฒฝ์ฐ)
function openTab(tabName){
// ํญ ์ด๊ธฐ
// ๋ง์ฝ ๋ ๋ฒ์งธ ํญ์ด๋ผ๋ฉด textarea ๋์ด ์กฐ์ ํ๋ ํจ์ ์คํํ๊ธฐ
if(tabName ==='tab2'){
adjustTextareaHeightForAll();
}
}
function adjustTextareaHeightForAll(){
// .. ์๋ต ..
const textarea = document.querySelectorAll('[id*="desc"]');
textarea.style.height = 'auto';
textarea.style.height = `\${textarea.scrollHeight + 3}px`;
}
๋ฐ๋ผ์ ๋ ๋ฒ์งธ ํญ์ ๋๋ ์ ๋ textarea์ ๋์ด๋ฅผ ๊ณ์ฐํ๋ ๋ฐฉ์์ผ๋ก ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ๋ค.
์ด๋ ๊ฒ ํ๋ ๋ฌธ์ ์์ด ๋์ด๊ฐ ์ ๋๋ก ์กฐ์ ๋์๋ค.
onload ์์ ๋์ด๋ฅผ ๊ณ์ฐํ๋ฉด ์ ์ ๋๋์ง ์ ๋ชจ๋ฅด๊ฒ ๋ค.
DOM์ด ์์ ํ ๋ก๋๋์ง ์์์ ์๊ธด ๋ฌธ์ ์ธ์ง, ๋ค๋ฅธ ์ด์ ๊ฐ ์๋์ง ํ์คํ์ง ์๋ค.
์๋ง ๊ธฐ๋ณธ์ด Tab1์ด๋ผ Tab1์ ๋ด์ฉ์ด ํ์๊ฐ ๋๋ ๋ฐ๋ฉด, Tab2๋ ๋ด์ฉ์ด ํ์๋๊ธฐ ์ ์ธ ์ํ์ด๋ค.
์ด ์ํฉ์์ height์ ์ก์ผ๋ ค๊ณ ํ๋ 0์ด ๋ฌ ๊ฒ ๊ฐ๋ค.
์ฌ์ฉ์๊ฐ ํด๋ฆญํ์ง ์์ผ๋ฉด ๋ด์ฉ์ด ํ์๋์ง ์์ผ๋ฏ๋ก onload ์ ํจ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ ๋ณด๋จ, Tab ์ ํ์์ ํจ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ๋ฐ๋์งํด๋ณด์ธ๋ค.