Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

훈돌라

2024. 5. 3. 두 번째 팀 과제 (3) 본문

카테고리 없음

2024. 5. 3. 두 번째 팀 과제 (3)

훈돌라 2024. 5. 3. 19:34

검색창 인풋 유효성 검사의 다른 버젼!

 

기존 구현해뒀던 유효성 검사

 

 

새로 구현한 유효성 검사

HTML

<input type="text" id="searchBar">
<p id="warningMessage" style="display: none; color: red;">영문은 지원하지 않습니다, 한글을 입력해주세요</p>

 

 

JS

const searchInput = document.getElementById("searchBar");
const warningMessage = document.getElementById("warningMessage");

searchInput.addEventListener("input", () => {
    const searchTerm = searchInput.value.toLowerCase();
    const movieCards = Array.from(document.getElementsByClassName("movieCard"));

    if (/^[ ㄱ-ㅎ|ㅏ-ㅣ|가-힣 ]*$/.test(searchTerm)) {
        warningMessage.style.display = "block";
    } else {
        warningMessage.style.display = "none";
        movieCards.forEach((card) => {
            const title = card.querySelector(".movieTitle").textContent.toLowerCase();
            card.style.display = title.includes(searchTerm) ? "block" : "none";
        });
    }
});

 

기존 코드에 if 문을 사용했다. 검색중에 한글정규표현식이 있다면 <p> 태그 (영문은 지원하지 않습니다. 한글을 입력해주세요)를 노출시키고 그렇지 않은 경우에는 영화 카드를 필터링하여 화면에 보여준다.

 

 

두 가지 다 적용시키긴 불필요한 것 같고, 둘 중 뭐가 낫겠냐고 팀원분들께 여쭤보니 기존에 구현해뒀던 swal.fire 알럿이 깔끔하고 괜찮을 것 같다고 하셔서 기존 유효성 검사로 유지하기로 했고,

 

사진에 보이는 것 처럼 OK 를 눌렀을 때 인풋창이 초기화되면 어떨까 하고 약간의 수정 작업을 거쳤다.

 

if (/[ㄱ-ㅎ|ㅏ-ㅣ|가-힣]/.test(searchTerm)) {
  swal.fire({
    text: "영문으로 검색해주세요!",
    onAfterClose: () => {
      searchInput.value = "";
    }
  });

 

SweetAlert 팝업을 닫은 후에 onAfterClose 콜백을 사용하여 인풋창을 초기화 해주는 로직.

 

 

검색창 유효성 검사 완성본 코드

const searchInput = document.getElementById("searchBar");
searchInput.addEventListener("input", () => {
  const searchTerm = searchInput.value.toLowerCase();
  const movieCards = Array.from(document.getElementsByClassName("movieCard"));

  if (/[ㄱ-ㅎ|ㅏ-ㅣ|가-힣]/.test(searchTerm)) {
    swal.fire({
      text: "영문으로 검색해주세요!",
      onAfterClose: () => {
        searchInput.value = "";
      }
    });
   
   
  } else {
    movieCards.forEach((card) => {
      const title = card.querySelector(".movieTitle").textContent.toLowerCase();
      card.style.display = title.includes(searchTerm) ? "block" : "none";
    });
  }
});

 

 

검색했을 때 뒤의 카드들도 같이 초기화되는 문제가 있었는데, 이 문제를 해결했다.

 

  SweetAlert를 띄운 후에도 MovieCard가 유지되도록 하기 위해 swal.fire("영문으로 검색해주세요!"); 다음에 추가적인 작업을 하지 않고 있어서 카드가 사라지는 문제였다.

 

if 문으로는 한글이 검색됬을 시 SweetAlert 을 띄우고, onAfterClsoe 콜벡 함수를 이용해

인풋의 벨류를 초기화 시켜줬다.

 

else 에는 title 이라는 변수에 movietitle 의 데이터들을 소문자로 변환하여 지정해줬고, 사용자가 입력한 값이 제목에 포함되어 있으면 display:block, 아니라면 none 해주게 코드를 짰다.

 

오늘은 성장했다. 이렇게 조금 씩 성장하는거다. 화이팅 김재훈.

 

이 글을 읽는 모든 사람들도 다 성장하는 하루를 보냈으면 좋겠다.

 

사실 나만 성장하고 다 멈춰있으면 좋겠음.

 

(샤라웃 투 양이준)