TIL-js

๐Ÿ“ฌ ๋‹ค์Œ ์šฐํŽธ๋ฒˆํ˜ธ API ์‚ฌ์šฉ ์˜ˆ์ œ

์˜ˆ์ œ ๋ฐ”๋กœ๊ฐ€๊ธฐ


0. ๋‹ค์Œ ์šฐํŽธ๋ฒˆํ˜ธ API ํŠน์ง•


1. ์šฐํŽธ๋ฒˆํ˜ธ ์„œ๋น„์Šค js ํŒŒ์ผ ์‚ฝ์ž…

<script
  defer
  src="//t1.daumcdn.net/mapjsapi/bundle/postcode/prod/postcode.v2.js"
></script>


2. ์šฐํŽธ๋ฒˆํ˜ธ ๊ฒ€์ƒ‰๋ฒ„ํŠผ ํด๋ฆญ ์‹œ ํŒ์—…์ฐฝ ์—ด๊ธฐ

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,
  });
}


3. ์šฐํŽธ๋ฒˆํ˜ธ ๊ฒ€์ƒ‰์ด ์™„๋ฃŒ๋œ ํ›„ ์ฃผ์†Œ ์ •๋ณด ๋ฐ›์•„ ํ™”๋ฉด์— ํ‘œ์‹œํ•˜๊ธฐ

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 = "";
  }
}


4. ํŒ์—…์ฐฝ์„ ๋‹ซ์€ ํ›„, ์ƒ์„ธ์ •๋ณด input์— ์ปค์„œ ํฌ์ปค์Šคํ•˜๊ธฐ

function focusDetailAddressInput(state) {
  // ์‚ฌ์šฉ์ž๊ฐ€ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๋ฅผ ์„ ํƒํ•˜์—ฌ ํŒ์—…์ฐฝ์„ ๋‹ซ์€ ๊ฒฝ์šฐ
  if (state === "COMPLETE_CLOSE") {
    detailAddress.focus();
  }
}