์ด ํฌ์คํ ์ ์ฟ ํก ํํธ๋์ค ํ๋์ ์ผํ์ผ๋ก, ์ด์ ๋ฐ๋ฅธ ์ผ์ ์ก์ ์์๋ฃ๋ฅผ ์ ๊ณต๋ฐ์ ์ ์์ต๋๋ค.
๋ฐ์ํ
http://hyeonseok.com/ ์ ํ์๋๊ป์ ์ด์์ค์ธ ๋ธ๋ก๊ทธ์ ์ฌ๋ฆฐ ๊ธ์ ๋๋ค.
์๋ฌธ์ ๋ณด์๋ ค๋ฉด http://hyeonseok.com/docs/accessible-javascript/ ๋ก ์ ์ํ์๊ธฐ ๋ฐ๋๋๋ค.
์ ๊ทผ์ฑ์ ํด์น์ง ์๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ์ฌ์ฉ
์ ํ์
2006๋ 5์
์๋ฐ์คํฌ๋ฆฝํธ์ ๋ํ ์๋ชป๋ ์๊ฐ
์๋ฐ์คํฌ๋ฆฝํธ ์์ด๋ ๊ฐ๋ฐ์ ํ ์ ์๋ค?
๋ง์ ๊ฐ๋ฐ์๋ค์ด ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์์ด๋ ๊ฐ๋ฐ์ ํ ์ ์๋ค๊ณ ์๊ฐํ๋ค. ๊ทธ๋งํผ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ผ์์ ์ผ๋ก ๋ง์ด ์ฌ์ฉํ๊ณ , ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ํด์ ์๋ชป ์คํดํ๊ณ ์๋ ๋ถ๋ถ์ด ๋ง๋ค๋ ๊ฒ์ด๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๋ ํด๋ผ์ด์ธํธ ํ๊ฒฝ์์ ์๋ํ๊ธฐ ๋๋ฌธ์ ํต์ฌ๋ก์ง์ ์ฌ์ฉํด์๋ ์๋๋ค. ํต์ฌ์ ์ธ ๋ก์ง์ ์๋ฒ์ฌ์ด๋ ์ธ์ด๋ก ์ฒ๋ฆฌ๋ฅผ ํ๊ณ ์๋ฐ์คํฌ๋ฆฝํธ๋ ๊ทธ ์์์ UI๊ตฌ์ฑ์ ์ํด์ ๋์์ฃผ๊ธฐ๋ง ํด์ผ ํ๋ค. ๋ฐ๊ฟ ๋งํ๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์์ด๋ ํต์ฌ ๋ก์ง์ ์๋์ ํด์ผ ํ๋ค. ๋จผ์ ์๋ฐ์คํฌ๋ฆฝํธ์์ด HTML๊ณผ ์๋ฒ์ฌ์ด๋ ์ธ์ด๋ง์ผ๋ก ์๋ฒฝํ๊ฒ ์๋ ํ ์ ์๊ฒ ๊ฐ๋ฐ์ ๋๋ธ ํ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ด์ฉํด์ ์ข์ UI๋ ์ ํจ์ฑ ๊ฒ์ฌ ๋ฑ์ ํ๋ ๋ถ๋ถ์ ์ถ๊ฐ ํ๋ ์์๋ก ๋ง๋ค์ด์ผ ํ๋ค. ๋ง์ฝ ์ด๋ฅผ ์ด๊ธฐ๊ณ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๊ธฐ๋ฅ์ ์ผ๋ถ๋ก ์ฌ์ฉํ๋ฉด ์ ๊ทผ์ฑ์ด ๋จ์ด์ง๋ ๊ฒ ๋ฟ๋ง ์๋๋ผ ๋ณด์๋ ๋จ์ด์ง๊ณ ๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ๋ ๋ณด์ฅ๋์ง ์๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์๋ํ์ง ์๋ ํ๊ฒฝ๋ ๊ณ ๋ ค๋ฅผ ํด ์ค์ผ ํ๋๊ฐ?
์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์๋ํ์ง ์๋ ํ๊ฒฝ์ด ์ผ๋ฐ์ ์ธ ์ํฉ์ ์๋์ง๋ง ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ ์ ์๋ ํ๊ฒฝ์ ๋ํ ๊ณ ๋ ค๋ ๋ฐ๋์ ํ์ํ๋ค. ์ค์ ๋ก ๋ธ๋ผ์ฐ์ ธ์ ๋ฐ๋ผ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฒ์ ผ์ด ๋ค๋ฅผ ์ ์๊ณ ๊ฐ๋ฐ ํ๊ฒฝ์์๋ ์ ์๋ํ๋ ๊ธฐ๋ฅ์ด ์ด๋ค ์ฌ์ฉ์ ํ๊ฒฝ์์๋ ์๋ํ์ง ์์ ์๋ ์๋ค. ๊ทธ๋ฆฌ๊ณ ์ฌ์ฉ์ ์ค์์๋ ์ฌ๋ฌ ์ด์ ๋ก ์ค์ค๋ก ์๋ฐ์คํฌ๋ฆฝํธ ์ฌ์ฉ์ ์ค์งํ๊ณ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ ์๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์ง ์์๋ ํต์ฌ ๊ธฐ๋ฅ์ ๊ตฌํํ ์ ์์์๋ ๋ถ๊ตฌํ๊ณ ๋ถํ์ํ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ ๊ทผ์ฑ์ ๋จ์ด๋จ๋ฆฌ๋ ๊ฒ์ด ์ฌ๋ฐ๋ฅธ ํ์ด์ง ์ ์ ๋ฐฉ๋ฒ์ ์๋๋ค.
์๋ฒ ๋ถํ๋ฅผ ์ค์ด๊ธฐ ์ํด์ ์๋ฐ์คํฌ๋ฆฝํธ๋ก๋ง ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ํ๋ค?
์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ด์ฉํด์ ์๋ฒ์ ๋ถํ๋ฅผ ์ค์ผ ์ ์๋ค๋ ๊ฒ์ ๋ง์ ์ฌ๋๋ค์ด ์๊ณ ์์ ๊ฒ์ด๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์ ์ฒ๋ฆฌ๋ฅผ ํํจ์ผ๋ก์ ๋คํธ์์ด๋ ์๋ฒ์ ์ฒ๋ฆฌ๋ฅผ ๊ฐ์์ํจ๋ค๋ ๊ฒ์ธ๋ฐ ์ด๊ฒ์ ์๋ชป ์ดํดํ์ฌ ์๋ฐ์คํฌ๋ฆฝํธ๋ง์ผ๋ก ์ ํจ์ฑ์ ์ฒดํฌํ๋ ๊ฒ์ด ์ข๋ค๊ณ ์๊ฐํ๋ ์ฌ๋๋ค์ด ์๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์ ์ฒ๋ฆฌ๋ฅผ ํ๊ฒฐ๊ณผ๋ฌผ์ ๊ทธ๋๋ก ๋ฏฟ์ผ๋ฉด ์๋๋ค. ์ฌ์ฉ์์ธก์ผ๋ก ๋ถํฐ ๋์ค์จ ๋ชจ๋ ๊ฐ์ ๊ทธ ๊ฐ์ ์ ํจ์ฑ์ ์์ ํ ๋ณด์ฅํ ์ ์๊ธฐ ๋๋ฌธ์ ์๋ฒ์ธก์์๋ ์ ํจ์ฑ ์ฒดํฌ๋ฅผ ํด ์ค์ผ๋ง ํ๋ค. ์ด๊ฒ์ ์๋ฒ์ ๋ถํ๋ฅผ ๋์ด๋ ๊ฒ ์ด์ ์ ์๋ฃ์ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํ๋ ์ค์ํ ๊ณผ์ ์ด๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๊ฑฐ์น์ง ์๊ณ ์๋ฒ์ ์์๋ก ๋ณ์กฐ๋ ๊ฐ์ ๋ณด๋ด๋ ์ผ์ ์์ฃผ ์ฌ์ด ์ผ์ด๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์ง ์์ผ๋ฉด UI๊ฐ ๋ถํธํด ์ง๋ค?
์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ด์ฉํด์ RIA๋ ์ข์ UI๋ฅผ ๋ง๋ค ์ ์๋ ๊ฒ์ ์ฌ์ค์ด์ง๋ง ์นํ๊ฒฝ์ ์ดํดํ๊ณ ์ผ๋ฐ์ ์ธ ์น ์ธํฐํ์ด์ค๋ฅผ ์ด์ฉํด์ ๋ง๋๋ ๊ฒ์ด ๋ ์ข์ UI๋ฅผ ์ ๊ณตํ ์ ์๋ค. ์ฌ์ฉ์ ์นํ์ ์ธ UI์ ๋ํ ๊ณ ๋ฏผ์ ํด์ผ์ง ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ๋ค๊ณ ์ข์ UI๊ฐ ๋์ค๋ ๊ฒ์ ์๋๋ค. ์ค์ ์ ์ผ๋ก ๊ฐ์ฅ ์ฌ์ฉ์๊ฐ ์ดํดํ๊ธฐ ์ฌ์ด UI๋ ์ฌ์ฉ์ OS๋ ๋ธ๋ผ์ฐ์ ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ๋ ์ปจํธ๋กค ์ธํฐํ์ด์ค๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ๋ ๊ฒ์ด๊ณ ์ด๋ ์๋ฐ์คํฌ๋ฆฝํธ ์์ด๋ ์ถฉ๋ถํ ๊ฐ๋ฅํ๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๋ ์ฌ์ฉ์ ํ๊ฒฝ์ ๋ด๋ ค๋ณด๋ด์ง๊ณ ์ฌ์ฉ์์ ๋ธ๋ผ์ฐ์ ธ์์ ์คํ์ด ๋๊ธฐ ๋๋ฌธ์ ์ด์ ์์กดํด์ ํ๋ก๊ทธ๋จ์ ๋ง๋ค๊ฒ ๋๋ฉด ๋ณด์, ์ ๊ทผ์ฑ์ ๋ฌธ์ ๊ฐ ์๊ธฐ๊ธฐ ์ฝ๋ค. ์ด๋ฌํ ์๋ฐ์คํฌ๋ฆฝํธ์ ํน์ง์ ์ ํํ ์ดํดํ์ง ๋ชปํ ์๋ชป๋ ๊ฐ๋ฐ ๋ฐฉ๋ฒ์ด๋ ์์๋ค ๋๋ฌธ์ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์ค์ฉ๋๊ณ ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๋ ์ด๋๊น์ง๋ ๋ณด์กฐ์ ์ธ ์๋จ์ด๋ผ๋ ๊ฒ์ ์ดํดํ๊ณ ํต์ฌ์ ์ธ ๊ธฐ๋ฅ์ ํด์น์ง ์๋ ํ๋์์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ฌด์๋ณด๋ค ์ค์ํ๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ์ ์ธ
<script language="Javascript">
//code
</script>
์๋ฐ์คํฌ๋ฆฝํธ๋ <script> ์๋ฆฌ๋จผํธ๋ก ์ ์ธ์ ํ๋ค. ๋ชจ๋ <script>์๋ฆฌ๋จผํธ๋ type์ ๋ช ์ํด ์ฃผ์ด์ผ ํ๊ณ ์๋ฐ์คํฌ๋ฆฝํธ์ type์ "text/javascript" ์ด๋ค. ๋ง์ ๊ฒฝ์ฐ language ๋ง์ ์ ์ธํด์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฒ์ ผ์ ๋ช ์ํ๋๋ฐ ๋ฐ๋์ type๋ ๊ฐ์ด ๋ช ์๋ฅผ ํด ์ฃผ์ด์ผ ํ๋ค.
<script type="text/javascript">
//code
</script>
<a>์ href ์์ฑ๊ณผ ์๋ฐ์คํฌ๋ฆฝํธ์ ์ฌ์ฉ
href๋ Hypertext REFerence์ ์ฝ์์ด๋ค. ๋ค์ ๋งํด์ hypertext์ ์์น๋ฅผ ๋ํ๋ด๋ uri๋ฅผ ๊ทธ ๊ฐ์ผ๋ก ๊ฐ๋๋ค. ํ์ง๋ง ๋ง์ ๊ฒฝ์ฐ ์ด href์์ "javascript:myFunction()"๊ณผ ๊ฐ์ด ์๋ชป๋ ๊ตฌ๋ฌธ์ ์ด์ฉํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ์ด์ ๊ฐ์ด href์์ ์๋ชป๋ ๊ฐ์ด ๋ค์ด๊ฐ๊ฒ ๋ ๊ฒฝ์ฐ, ๋ถ๋งํฌ๋ ์์ฐฝ, ์ํญ์ผ๋ก ์ด๊ธฐ ๋ฑ์ href ๊ด๋ จ๋ ๋ธ๋ผ์ฐ์ ์ ๊ธฐ๋ฅ๋ค์ด ์ ์์ ์ผ๋ก ์๋ํ์ง ์๊ฒ ๋๋ค. ๋ฐ๋ผ์ href์์๋ ํญ์ uri๊ฐ ๋ค์ด๊ฐ๋๋ก ํ๊ณ ์๋ฐ์คํฌ๋ฆฝํธ ์ ์ฉ์ onclick๊ณผ ๊ฐ์ ์ด๋ฒคํธ ์์ฑ์ ์ด์ฉํด์ผ ํ๋ค.
์๋ฏธ ์๋ href ๊ฐ์ ์ฌ์ฉํ ๊ฒฝ์ฐ
์ฌ์ฉ์์ ๋งํฌ ํด๋ฆญ์ด ๋งํฌ์ ๊ด๋ จ์ด ์๊ณ ์ด๋ฅผ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ด์ฉํด์ ์ฒ๋ฆฌ๋ฅผ ํ์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค๋ฉด ์ฐ์ ์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๋นผ๊ณ ๋ ํ์ด์ง์ ์ด๋์ ํ ์ ์๊ฒ href์ ์ ์ ํ ๊ฐ์ ๋ฃ์ด ์ฃผ์ด์ผ ํ๋ค. ์ด์ ๊ฐ์ ๊ฒฝ์ฐ๋ก ํญ๋ฉ๋ด๋ฅผ ๋ค ์ ์๋ค. ํญ๋ฉ๋ด์ ๊ฒฝ์ฐ ํญ์ ๋๋ฅด๋ฉด ํด๋น ํญ๊ณผ ๊ด๋ จ์๋ ์ปจํ ์ธ ๋ฅผ ๋ณด์ฌ์ฃผ๋ ์์ผ๋ก ์๋ํ๊ฒ ๋๋ค. javasript๊ฐ ์๋ค๋ฉด ํญ์ ํด๋ฆญํ์ ๋ ํด๋น ์ปจํ ์ธ ๋ก ์ด๋์ ํ๋ ์์ผ๋ก ๊ตฌํ ๋๋ฉด ๋๋ค. href ์์ ๊ฐ์ผ๋ก ํ์ด์ง ์์์์ ํด๋น ์ปจํ ์ธ ์ต์ปค ์ฃผ์๋ฅผ ๋ฃ๋ ๊ฒ์ผ๋ก ๊ฐ๋จํ ๊ตฌํ ๋๋ค.
<a href="#notice-list"><img src="notice-tab.gif" alt="Notice" /></a>
๊ทธ๋ฆฌ๊ณ ์ด ๋งํฌ์ ์ ๊ธฐ๋ณธ์ผ๋ก ํ์ฌ ์ด๋ฒคํธ ์์ฑ์ผ๋ก ์ํ๋ ๊ธฐ๋ฅ์ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.
<a href="#notice-list" onclick="showNoticeTab(); return false;"><img src="notice-tab.gif" alt="Notice" /></a>
onclick์ผ๋ก ํญ์ ๋ณด์ฌ์ค ํ false๋ฅผ ๋ฆฌํดํ์ฌ ํด๋น ์ต์ปค๋ก ์ด๋ํ์ง ์๋๋ก ์ฒ๋ฆฌ ํ๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์๋์ ํ ๋์๋ ํด๋ฆญํ๋ฉด ์ ์์ ์ผ๋ก ํญ์ผ๋ก ์๋์ ํ ๊ฒ์ด๊ณ , ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ์๋ ํด๋น ์ปจํ ์ธ ๋ก ์ด๋์ ํ์ฌ ๋์ ์ ๊ทผ์ฑ์ ์ ์งํ ์ ์๋ค.
๋ง์ฝ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ๋งํฌ์ ๊ด๋ จ์ด ์๋ ๊ฒฝ์ฐ์๋ <a>ํ๊ทธ๋ฅผ ์ฌ์ฉํด์ ์คํฌ๋ฆฝํธ๋ฅผ ์ ์ฉํ๋ฉด ์๋๋ค. ๋ณดํต ํน์ ํจ๊ณผ๋ฅผ ์ฃผ๋ ๊ฒ์ด ์ด๋ฌํ ๊ฒ์ ํด๋คํ๊ฒ ๋๋๋ฐ ์ด ๊ฒฝ์ฐ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์๋์ ํ์ง ์์๋ ์ปจํ ์ธ ์ดํด์ ํฌ๊ฒ ๋ฌธ์ ๊ฐ ๋์ง ์๋ ๊ฒฝ์ฐ์ด๋ค.
<img src="button.gif" style="cursor: pointer;" onclick="myAction()" />
ํจ๊ณผ๋ฅผ ์ํ ์๋ฐ์คํฌ๋ฆฝํธ๋ ๋จ์ํ onclick์ ์ด์ฉํด์ ์ ์ฉ์ ํ๊ณ <a>๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฌ์ฉ์๊ฐ ๋ง์ฐ์ค ํฌ์ธํฐ๋ฅผ ์ฌ๋ ธ์ ๋ ์๋ชจ์์ผ๋ก ๋์ค๋ ๊ฒ์ ์คํ์ผ๋ก ์ฒ๋ฆฌํ๋ฉด ๋๋ค.
ํ์ ์ฐฝ์ ์ด ๋(window.open)
<img src="openWindow.gif" onclick="window.open('popup.html', '', 'widht=300,height=200')">
<a href="#"><img src="openWindow.gif" onclick="window.open('popup.html', '', 'widht=300,height=200')"></a>
href์ #๊ณผ ๊ฐ์ ์๋ฏธ ์๋ ๊ฐ์ ๋ฃ๊ฑฐ๋ onclick ์์ ๊ฒฝ๋ก๋ฅผ ์ฒ๋ฆฌํ๋ ๊ฒฝ์ฐ๊ฐ ์๋๋ฐ ํ์ ์ฐฝ์ ๋งํฌ์ด๊ณ ํ์ด์ง๊ฐ ๋ณ๋๋ก ์กด์ฌ ํ๊ธฐ ๋๋ฌธ์ <a>๋ฅผ ์ด์ฉํด์ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ณ href์๋ ํด๋น ํ์ ์ ๊ฒฝ๋ก๋ฅผ ๋ฃ์ด์ผ ํ๋ค.
<a href="popup.html" onclick="window.open(this.href, 'popupName', 'width=300,height=200'); return false;"><img src="openWindow.gif"></a>
์ด๋ด ๊ฒฝ์ฐ ์ฌ์ฉ์๊ฐ ์์ ์ ์๋ ๋๋ก ํ์ ์ฐฝ์ ์์ฐฝ, ์ํญ ๋ฑ์ผ๋ก ์ด ์ ์๊ณ ์ฌ์ง์ด ์ฆ๊ฒจ ์ฐพ๊ธฐ๋ ํ ์ ์๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ด์ฉํ ํ์ด์ง ์ด๋
์น์ฌ์ดํธ๋ฅผ ์ด์ฉํ๋ค ๋ณด๋ฉด ํผ์์ ๊ฐ์ ์ ๋ ฅํ๊ณ ์๋ฐ์ ํ๋ ์๊ฐ "๋ฐ๋ค๋ค๋ฅ" ํ๋ ์์ผ๋ก ํด๋ฆญ์ ์ฌ๋ฌ๋ฒ ํ ๊ฒ๊ณผ ๊ฐ์ ์๋ฆฌ๊ฐ ๋๋ ๊ฒฝ์ฐ๋ฅผ ์ ํ๊ฒ ๋๋ค. ํ๋ก์ธ์ค๊ฐ ์ฌ๋ฌํ์ด์ง์ ๊ฑธ์ณ์ ์ผ์ด๋๊ฒ ๋๋๋ฐ ์ด ์ฒ๋ฆฌ๋ฅผ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์ฒ๋ฆฌ๋ฅผ ํด์ ์ด๋ฌํ ํ์์ด ๋ฐ์์ ํ๊ฒ ๋๋ค.
<script type="text/javascript">document.location.href="redirection.html";</script>
์์ ๊ฐ์ด ํ์ด์ง๋ฅผ ์ด๋ ํ๊ฑฐ๋ ์๋์ ๊ฐ์ด <form>์ ์ด์ฉํด์ ๊ฐ์ ๋๊ธฐ๋ ๊ฒฝ์ฐ๊ฐ ์ด๋ฌํ ๊ฒฝ์ฐ์ด๋ค.
<form name="login_form">
<input type="hidden" name="user_id" value="myid" />
<input type="hidden" name="user_pwd" value="mypassword" />
<input type="hidden" name="redirect_url" value="http://mysite.com/login/" />
<input type="hidden" name="somevalue" value="blahblah" />
...
</form>
<script type="text/javascript">
f = document.forms.login_form;
f.action = "http://login.oursite.com/login/";
...
f.submit();
</script>
์ฌํ ๊ฒฝ์ฐ ์๋์ ๊ฐ์ด ์ ํ ์๋ฏธ ์๋ ํผ์ ์ด์ฉํ๊ธฐ๋ ํ๋ค.
<form method="post" name="sg_form" action="http://www.qubi.com/" target="_top">
</form>
<script> sg_form.submit(); //3</script>
์์ ๊ฐ์ ํ์ด์ง๋ค์ html ๋ฌธ๋ฒ์ ์ค๋ฅ๊ฐ ์๋ ํ์ด์ง ๋ค์ด๊ณ ์ด ๋๋ฌธ์ ์๋์ด ์ ๋ ์๋ ์๋ค. <form>์๋ฆฌ๋จผํธ๋ <script>์๋ฆฌ๋จผํธ๋ ์์์ <body>๋ <head>์๋ฆฌ๋จผํธ๊ฐ ์์ด์ผ ํ๋๋ฐ ์์ ๊ฐ์ ๊ฒฝ์ฐ ์ด๋ฌํ ์๋ฆฌ๋จผํธ๊ฐ ์๊ธฐ ๋๋ฌธ์ html๋ก ํด์์ด ์๋์ด ์คํฌ๋ฆฝํธ๊ฐ ์๋ ๋์ง ์๊ฑฐ๋ ๊ฐ์ด ๋์ด๊ฐ์ง ์์ ์๋ ์๋ค. ๊ทธ๋ฆฌ๊ณ <form>์ submit <input>์ด ์๊ธฐ ๋๋ฌธ์ ์๋ฐ์คํฌ๋ฆฝํธ๋ก submit์ด ์ผ์ด๋์ง ์์ ์๋ ์๋ค.
์ด์ ๊ฐ์ด ํ์ด์ง๋ฅผ ์ด๋ํ๊ฑฐ๋ ๊ฐ์ ๋๊ธธ ํ์๊ฐ ์์ ๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ์์กดํด์ ์ด๋ฅผ ์ฒ๋ฆฌํ๊ฒ ๋๋ฉด ํด๋ผ์ด์ธํธ์ ํ๊ฒฝ์ ๋ฐ๋ผ์ ๋์์ด ์คํจํ ์ ์๋ค. ๋ฐ๋ผ์ ์ด๋ฌํ ์ฒ๋ฆฌ๋ ์๋ฐ์คํฌ๋ฆฝํธ์์ ์ฒ๋ฆฌ ํ์ง ๋ง๊ณ ์๋ฒ ์ธก์์ httpํค๋ ์ ๋ณด๋ฅผ ์ด์ฉํด์ ์ฒ๋ฆฌํด์ผ ํ๋ค.
์ด๋ฌํ ์ค๊ฐ๊ณผ์ ์์์ ์ฒ๋ฆฌ๋ฅผ ์๋ฒ์ธก์์ ๋ชจ๋ ์ฒ๋ฆฌ ํ๋ ๊ฒ์ด ๊ฐ์ฅ ๋ฐ๋์ง ํ์ง๋ง ์ด์ฉ ์ ์์ด ์ฌ์ฉ์ ํด์ผํ ๊ฒฝ์ฐ์๋ - ๊ทธ๋ด ๊ฒฝ์ฐ๊ฐ ๋ง์ง๋ ์๊ฒ ์ง๋ง ๊ธฐ์กด์ ํธํ์ฑ์ ์ํด์ - DTD์ ์ธ์ด๋ <html> ๋ฃจํธ ์๋ฆฌ๋จผํธ, <head>, <body>์ ๊ฐ์ด ํ์ ์๋ฆฌ๋จผํธ๋ค์ด ์กด์ฌํ๋ ์๊ฒฐ๋ ํ์ด์ง๋ฅผ ์ฌ์ฉ ํ๋๋ก ํ๊ณ , ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์๋ํ์ง ์๋ ๊ฒฝ์ฐ๋ฅผ ์ํด์ <form>์ submit๋ฒํผ๋ ์ ๊ณต์ ํ๊ณ , ๊ฒฐ๊ณผ ๋ฉ์ธ์ง๋ alert์ธ์ ์ผ๋ฐ text์ <a>๋ฅผ ์ด์ฉํ ๋งํฌ๋ฅผ ์ ๊ณตํ๋๋ก ํด์ผ ํ๋ค.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=euc-kr" />
<title>Redirect</title>
</head>
<body>
<script type="text/javascript">
/*
some processes...
*/
alert('์ด๋์ ๋ํ ์ด์ ๋ก ๋ค์ ๋์ ๊ฐ๋๋ค.');
document.location.href="redirection.html";
</script>
<p><a href="redirection.html">์ด๋์ ๋ํ ์ด์ ๋ก ๋ค์ ๋์ ๊ฐ๋๋ค.</a></p>
</body>
</html>
charset์ด ์๋ ๊ฒฝ์ฐ ๋ธ๋ผ์ฐ์ ธ์ ๊ธฐ๋ณธ ์ค์ ์ผ๋ก alert์ด ์๋ํ๊ธฐ ๋๋ฌธ์ ๋ธ๋ผ์ฐ์ ธ์ ๊ธฐ๋ณธ ์ค์ ์ด ko-kr์ด ์๋ ๊ฒฝ์ฐ ํ๊ธ์ด ๊นจ์ง๊ฒ ๋๋ค. ๋ฌธ์์ mime-type๋ text/html์ธ์ง ํ์ธํด์ผ ํ๋ค.
<form>์์์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฌ์ฉ
์ผ๋ฐ์ ์ผ๋ก <form>์ ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๊ฐ์ ์๋ฒ์ธก์ ์ ๋ฌํ๋ ์ญํ ์ ํ๊ณ ๊ทธ ์ ๋ฌ์ <form>์ submit ๊ธฐ๋ฅ์ ํตํด์ ์ด๋ฃจ์ด ์ง๋ค. ์ด๋ฌํ ํผ์ ๊ตฌํ ํ ๋์ ์ผ๋ฐ์ ์ผ๋ก ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
submit
ํผ์ ๊ทธ ์์ฒด์ ์ผ๋ก ๊ฐ์ ๋ณด๋ด๋ ์๋ฐ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ณ ์๋ค. <input type="submit" />์ด๋ <input type="image" />์ด ์๋ฐ๊ธฐ๋ฅ์ ํ๋ ์ปจํธ๋กค์ธ๋ฐ ํผ์ ๊ฐ ์ ํจ์ฑ ์ฒดํฌ๋ฅผ ํ๋ ๊ณผ์ ์์ ์ด๋ฌํ ํผ์ ์์ฒด์ ์ธ ์๋ฐ๊ธฐ๋ฅ์ ์ด์ฉํ์ง ์๊ณ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ํผ ์๋ฐ์ ํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค.
<script type="text/javascript">
function submitForm() {
loginForm.submit();
}
</script>
<form id="loginForm" name="loginForm" action="">
User Id <input type="text" name="loginId">
User Password <input type="password" name="loginPassword"><br>
<img src="login.gif" onclick="submitForm()">
</form>
์์ ๊ฐ์ ๊ฒฝ์ฐ ํผ์ ์๋ฐ๊ธฐ๋ฅ์ด ์๊ธฐ ๋๋ฌธ์ ๋ธ๋ผ์ฐ์ ธ์ ๋ฐ๋ผ์ script๋ก ์๋ฐ์ด ์๋๋ ๊ฒฝ์ฐ๋ ์๊ณ ์๋ฐ ๋์ ์ ์ด๋ฏธ์ง๊ฐ ๋ค์ด๊ฐ ์๊ธฐ ๋๋ฌธ์ ์๋ฏธ์ ์ผ๋ก๋ ๋ง์ง ์๊ฒ ๋๋ค. ๋ฐ๋ผ์ ํผ์ ์ ์ํ ๋์๋ ๋ฐ๋์ ์๋ฐ๊ธฐ๋ฅ์ <input>์ ์ด์ฉํด์ ์ ๊ณตํด์ผ ํ๋ค.
<form id="loginForm" name="loginForm" action="">
<p>
<label for="loginId">User Id</label>
<input type="text" id="loginId" name="loginId" /><br />
<label for="loginPassword">User Password</label>
<input type="password" id="loginPassword" name="loginPassword" />
</p>
<p>
<input type="image" src="login.gif" alt="Login" />
</p>
</form>
๋ง์ ๊ฒฝ์ฐ <html>์ ์ ๊ณผ์ ์์ ์๋ฐ์ <img>๋ก ๋ฃ๋ ๊ฒฝ์ฐ๊ฐ ์๋๋ฐ ์ด ๊ฒฝ์ฐ ์ด๋ฅผ ๊ทธ๋ฅ ์ฌ์ฉํ๋ฉด ์๋๊ณ ์ ์ ํ <input>์ผ๋ก ๋ฐ๊พธ์ด์ ์ฌ์ฉํด์ผ ํ๋ค.
validation
ํด๋ผ์ด์ธํธ ์ธก์์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ด์ฉํ ์ ํจ์ฑ ๊ฒ์ฆ์ <form>์ ์๋ฐ ์ด๋ฒคํธ๋ฅผ ์บ์นํ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํํด์ผ ํ๊ณ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ํผ์ ์๋ฐํ๋ ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ์๋๋ค.
<script type="text/javascript">
function submitForm() {
if (!loginForm.loginId.value) {
alert("์์ด๋๋ฅผ ๋ฃ์ด์ฃผ์ธ์.");
loginForm.loginId.focus();
} else if (!loginForm.loginPassword.value) {
alert("๋น๋ฐ๋ฒํธ๋ฅผ ๋ฃ์ด์ฃผ์ธ์.");
loginForm.loginPassword.focus();
} else {
loginForm.submit();
}
}
</script>
<form id="loginForm" name="loginForm" action="">
์์ด๋ <input type="text" name="loginId">
๋น๋ฐ๋ฒํธ <input type="password" name="loginPassword"><br>
<img src="login.gif" onclick="submitForm()">
</form>
์์ ๊ฐ์ ๊ฒฝ์ฐ ์๋ฐ์คํฌ๋ฆฝํธ๋ง์ ์ด์ฉํด์ ํผ์ ์๋ฐํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์์ด HTML๋ง์ผ๋ก๋ ๊ธฐ๋ฅ์ด ์๋ํ์ง ์๋๋ค.
<script type="text/javascript">
function submitForm(formEl) {
//TrimAll(formEl);
var errorMessage = null;
var objFocus = null;
if (formEl.loginId.value.length == 0) {
errorMessage = "์์ด๋๋ฅผ ๋ฃ์ด์ฃผ์ธ์.";
objFocus = formEl.loginId;
} else if (formEl.loginPassword.value.length == 0) {
errorMessage = "๋น๋ฐ๋ฒํธ๋ฅผ ๋ฃ์ด์ฃผ์ธ์.";
objFocus = formEl.loginPassword;
}
if(errorMessage != null) {
alert(errorMessage);
objFocus.focus();
return false;
}
return true;
}
</script>
<form id="loginForm" name="loginForm" action="" onsubmit="return submitForm(this)">
<label for="loginId">์์ด๋</label> <input type="text" id="loginId" name="loginId" />
<label for="loginPassword">๋น๋ฐ๋ฒํธ</label> <input type="password" id="loginPassword" name="loginPassword" /><br />
<input type="image" src="login.gif" alt="Login" />
</form>
์ด์ ๊ฐ์ด onsubmit ์ด๋ฒคํธ๋ฅผ ์ด์ฉํด์ ํผ์ ์ ํจ์ฑ์ ์ฒดํฌํ๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ true๋ false๋ก ๋ณด๋ด์ค์ผ๋ก์จ ํผ์ด ์คํฌ๋ฆฝํธ์ ๋ฐ๋ผ์ ์๋ฐ์ ์งํํ๊ฑฐ๋ ๋ฉ์ถ ์ ์๊ณ , onsubmit ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ง ์์๋ ์ฌ์ฉ์๋ ํผ์ ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ ์ ๊ทผ์ฑ์ด ๋์์ง๊ฒ ๋๋ค.
๊ฒ์ํ ๋ฑ์์ ๊ธฐ๋ฅ์ ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ํ๋ ๊ฒฝ์ฐ
๊ฒ์ํ์์ ํ์ด์ง์ ์ด๋์ ์๋ฐ์คํฌ๋ฆฝํธ๋ง์ผ๋ก ํ๋ ๊ฒ์ ๋ง์ด ๋ณผ ์ ์๋ค. ์๋์ ๊ฐ์ด ์ฌ์ฉ์ ์ธํ์ด ์๋ ๋น <form>์ ํ๋ ๋ง๋ค๊ณ ์ด๊ฒ๊ณผ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ด์ฉํด์ ๊ธ์ ์ฝ๊ฑฐ๋ ํ์ด์ง๋ฅผ ์ด๋ํ๋ ๊ฒ์ด๋ค.
<form method="post" name="vars">
<input type="hidden" name="articleId" value="23" />
<input type="hidden" name="page" value="3" />
<input type="hidden" name="keysord" value="" />
<input type="hidden" name="searchType" value="" />
<!-- ๋ฑ๋ฑ -->
</form>
...
<a href="javascript:ArticleRead()">๊ธ์ฝ๊ธฐ</a>
<a href="javascript:GoList()">๋ฆฌ์คํธ ๋ณด๊ธฐ</a>
url์ด ๊ฐ๋จํด ์ง๊ณ ๋ค๋ฃจ๊ธฐ ์ฝ๋ค๋ ์ด์ ๋ก ์ด๋ฌํ ๋ฐฉ์์ผ๋ก ๊ฐ๋ฐ์ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ ๊ฒ ๊ฐ์๋ฐ ์ ๋๋ก ์ฌ์ฉํด์๋ ์๋๋ ๋ฐฉ์์ด๋ค.
์ฐ์ ์์ ๊ฐ์ด ๋ชจ๋ ๊ธฐ๋ฅ์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ด์ฉํด์ ๊ตฌํ์ ํ๊ฒ ๋๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ ์ค๋ฅ๊ฐ ์๊ฑฐ๋ ํธ๋ํฐ๊ณผ ๊ฐ์ด ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์ ์์ ์ผ๋ก ์๋ ํ์ง ์๋ ์ํฉ์์๋ ์ ๊ทผ์ ํ ์ ์๊ฒ ๋๋ค. ๋ํ ๋ชจ๋ ๋ณ์๋ฅผ post๋ฅผ ํตํด์ ์ ๋ฌํ๊ธฐ ๋๋ฌธ์ url์ ํ์๊ฐ ๋์ง ์๊ณ ํด๋น ํ์ด์ง๋ฅผ ๋ฐ๋ก ๋ถ๋งํฌ ํ๋ค๋ ์ง ์ ์ฅ์ ํ ์๊ฐ ์๊ฒ๋๋ค. ๊ฒ์ํ์ ๊ฒฝ์ฐ ํด๋น ๊ฒ์๋ฌผ๋ก์ ์ ๊ทผ์ ์ฝ๊ฒ ํด ์ฃผ์ด์ผ ํ๋๋ฐ ์ฌ์ฉ์๊ฐ url์ ์ ์ ์๊ฒ ํจ์ผ๋ก์จ ์ ๊ทผ์ ์์ฒ์ ์ผ๋ก ๋ง๊ฒ ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ด์ฉํ์ง ์๊ณ ๋ <a>์ url๋ง์ผ๋ก๋ ์๋ ๊ฐ๋ฅํ ํ์ด์ง๋ฅผ ๋ง๋ค๊ณ QueryString์ ํจ์จ์ ์ผ๋ก ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ์ ๋ชจ์ํ์ฌ ๊ฐ๋ฐ์ ์งํํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ด๋ค.
๋ง์น๋ฉฐ
๋ณธ์ธ์ด ์น์ฌ์ดํธ ๊ฐ๋ฐ์ ํ๋ฉด์ ์ ํ ์ ์์๋ ๋ช๋ช ์๋ชป๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ฌ์ฉ ์๋ฅผ ์ ์ด ๋ณด์๋ค. ๊ทธ๋ฐ๋ฐ ๋๋ผ์ด ๊ฒ์ ์ด๋ฌํ ๊ฐ๋ฐ ๋ฐฉ์์ ์ด๋ณด๋ถํฐ ์ด๋์ ๋ ๊ฒฝ๋ ฅ์ด ๋ ๊ฐ๋ฐ์๋ค ๊น์ง ์๋ฌด๋ฐ ๊ณ ๋ฏผ ์์ด ์ฌ์ฉํ๊ณ ์๋ค๋ ๊ฒ์ด๋ค. ์ฑ ์ด ์๋ชป๋ ๊ฒ์ธ์ง ๊ต์ก์ด ์๋ชป ๋ ๊ฒ์ธ์ง ์ ํํ ๊ทผ์์ ์ ์๋ ์์ง๋ง ๋ง์ ๊ฐ๋ฐ์๋ค์ด ์น์ด ๊ฐ์ง๊ณ ์๋ ๊ธฐ๋ณธ์ ์ ํน์ฑ์ ๋ฌด์ํ์ฑ ์๋ชป๋ ๋ฐฉ๋ฒ์ ์ด์ฉํ์ฌ ๊ฐ๋ฐ์ ํ๊ณ ์๋ ๊ฒ์ด ์ฌ์ค์ด๋ค. ๊ทธ๋ฆฌ๊ณ ๋ ์ด๋ณด ๊ฐ๋ฐ์๋ค์ HTML์ ์ ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ ์ด๋ฌํ ๊ฐ๋ฐ ๋ฐฉ์์ ์๋ฌด ๊ณ ๋ฏผ ์์ด ๊ทธ๋ฅ ๋ฐ์๋ค์ด๊ณ ์๋ ๊ฒ์ด ์ฌ์ค์ด๋ค.
๋ธ๋ผ์ฐ์ ์ ๊ทผ์ฑ์ ๊ฐ์ฅ ํฌ๊ฒ ๋ฎ์ถ๊ณ ์๋ ๊ฒ์ด ๋ฐ๋ก ์ด ์๋ชป๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ์ฌ์ฉ์ด๋ค. ๋ถ๋ ์กฐ๊ธ์ด๋ผ๋ ๋ง์ ๊ฐ๋ฐ์๋ค์ด ๋งํฌ์ ๊ธฐ์ดํ ์น์ ํน์ฑ์ ์ดํดํ๊ณ ์ ๊ทผ์ฑ ๋์ ์น์ฌ์ดํธ, ์น ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถ ํ๊ธฐ๋ฅผ ๋ฐ๋ผ๋ ๋ฐ์ด๋ค.
๋ค์ด๋ก๋ : accessible-javascript.pdf(pdf 225KB)
๋ฐ์ํ