ํ์
์ฐฝ์ ํตํด ์ฃผ์๋ฅผ ๊ฒ์
ํ ์ ์์ต๋๋ค.Daum์์ ์ ๊ณตํ js ํ์ผ์ ์ฝ์
ํฉ๋๋ค.defer
์์ฑ์ ์ถ๊ฐํ์ฌ ํ์ด์ง๊ฐ ๋ชจ๋ ๋ก๋๋ ํ js ํ์ผ์ ์คํํฉ๋๋ค.<script
defer
src="//t1.daumcdn.net/mapjsapi/bundle/postcode/prod/postcode.v2.js"
></script>
const searchBtn = document.getElementById("search-btn");
searchBtn.addEventListener("click", handlePostcodSearch);
function handlePostcodSearch() {
const width = 500;
const height = 500;
new daum.Postcode({
oncomplete: openPostcodeSearch,
onclose: focusDetailAddressInput,
width,
height,
}).open({
popupTitle: "์ฐํธ๋ฒํธ ์ฐพ๊ธฐ",
left: window.screen.width / 2 - width / 2,
top: window.screen.height / 2 - height / 2,
});
}
new ์ฐ์ฐ์์ ์์ฑ์ ํจ์๋ฅผ ์ด์ฉํ์ฌ daum.Postcode ๊ฐ์ฒด
๋ฅผ ์์ฑํ๊ณ , open ํจ์
๋ฅผ ํตํด ์ฐํธ๋ฒํธ ์ฐพ๊ธฐ ํ์
์ ๋์์ค๋๋ค.
width, height
์์ฑ์ ํตํด ๋๋น์ ๋์ด๋ฅผ ์ง์ ํ๊ณ , open ํจ์์ left, top ์์ฑ
์ ํตํด ํ์
์ฐฝ์ ๊ฐ์ด๋ฐ๋ก ์ ๋ ฌํฉ๋๋ค.
input ์์๋ค์ ์ ํํ๊ณ , ์ฐํธ๋ฒํธ ๊ฒ์ ๊ฒฐ๊ณผ ๋ชฉ๋ก์์ ๊ฒฐ๊ณผ๊ฐ์ ํด๋ฆญํ ๊ฒฝ์ฐ(oncomplete) ์คํํ ์ฝ๋ฐฑํจ์๋ฅผ ์ ์ํฉ๋๋ค.
์ฌ์ฉ์๊ฐ ํด๋ฆญํ ์ฃผ์ ์ ๋ณด๊ฐ ์ฝ๋ฐฑํจ์์ ์ธ์(data)๋ก ๋ค์ด์ต๋๋ค.
const postcode = document.getElementById("postcode");
const roadAddress = document.getElementById("road-address");
const jibunAddress = document.getElementById("jibun-address");
const detailAddress = document.getElementById("detail-address");
const extraAddress = document.getElementById("extra-address");
function openPostcodeSearch(data) {
// ์ฐํธ๋ฒํธ์ ๋๋ก๋ช
์ฃผ์, ์ง๋ฒ์ฃผ์๋ฅผ ํด๋น ํ๋์ ๋ฃ๋๋ค.
postcode.value = data.zonecode;
roadAddress.value = data.roadAddress;
jibunAddress.value = data.jibunAddress;
// ์ฐธ๊ณ ํญ๋ชฉ ์ค์ ํ๊ธฐ
let extraRoadAddr = "";
// ๋ฒ์ ๋๋ช
์ด ์์ ๊ฒฝ์ฐ ์ฐธ๊ณ ํญ๋ชฉ์ ์ถ๊ฐํ๋ค. (๋ฒ์ ๋ฆฌ๋ ์ ์ธ)
// ๋ฒ์ ๋์ ๊ฒฝ์ฐ ๋ง์ง๋ง ๋ฌธ์๊ฐ "๋/๋ก/๊ฐ"๋ก ๋๋๋ค.
if (data.bname !== "" && /[๋|๋ก|๊ฐ]$/g.test(data.bname)) {
extraRoadAddr += data.bname;
}
// ๊ฑด๋ฌผ๋ช
์ด ์๊ณ , ๊ณต๋์ฃผํ์ผ ๊ฒฝ์ฐ ์ฐธ๊ณ ํญ๋ชฉ์ ์ถ๊ฐํ๋ค.
if (data.buildingName !== "" && data.apartment === "Y") {
extraRoadAddr +=
extraRoadAddr !== "" ? ", " + data.buildingName : data.buildingName;
}
// ํ์ํ ์ฐธ๊ณ ํญ๋ชฉ์ด ์์ ๊ฒฝ์ฐ, ๊ดํธ๊น์ง ์ถ๊ฐํ ์ต์ข
๋ฌธ์์ด์ ๋ง๋ ๋ค.
if (extraRoadAddr !== "") {
extraRoadAddr = " (" + extraRoadAddr + ")";
}
// ์ฐธ๊ณ ํญ๋ชฉ์ด ์๋ ๊ฒฝ์ฐ ํด๋น ํ๋์ ๋ฃ๋๋ค.
if (data.roadAddress !== "") {
extraAddress.value = extraRoadAddr;
} else {
extraAddress.value = "";
}
}
function focusDetailAddressInput(state) {
// ์ฌ์ฉ์๊ฐ ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ์ ํํ์ฌ ํ์
์ฐฝ์ ๋ซ์ ๊ฒฝ์ฐ
if (state === "COMPLETE_CLOSE") {
detailAddress.focus();
}
}
์ฝ๋ฐฑํจ์์ ์ธ์์ธ state
๋ ์ฐํธ๋ฒํธ ์ฐพ๊ธฐ ํ๋ฉด์ด ์ด๋ป๊ฒ ๋ซํ๋์ง์ ๋ํ ์ํ ๋ณ์์
๋๋ค.
์ฌ์ฉ์๊ฐ ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ์ ํํ์ฌ ํ์
์ฐฝ์ ๋ซ์ ๊ฒฝ์ฐ focus() ๋ฉ์๋
๋ฅผ ํตํด ์์ธ์ ๋ณด ์
๋ ฅ์ฐฝ์ ์ปค์๋ฅผ ํฌ์ปค์คํฉ๋๋ค.