Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript로 확인(confirm) 대화상자의 버튼 라벨 변경하기


브라우저에서 기본으로 제공되는 confirm() 함수는 버튼 라벨이 '확인'과 '취소'로 고정되어 있어 임의로 변경할 수 없습니다. 대신 jQuery와 CSS를 조합하면 원하는 문구가 적힌 버튼을 갖춘 커스텀 확인 대화상자를 손쉽게 구현할 수 있습니다.
아래 예제는 표준 확인창과 달리 자유롭게 버튼 라벨을 지정한 확인 대화상자를 만드는 코드입니다.

전체 예제 코드

<!DOCTYPE html>
<html>
   <head>
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js">
      </script>
      <script>
         function functionConfirm(msg, myYes, myNo)
         {
            var confirmBox = $("#confirm");
            confirmBox.find(".message").text(msg);
            confirmBox.find(".yes,.no").unbind().click(function()
            {
              confirmBox.hide();
            });
            confirmBox.find(".yes").click(myYes);
            confirmBox.find(".no").click(myNo);
            confirmBox.show();
         }
      </script>
      <style>
         #confirm
         {
            display: none;
            background-color: #91FF00;
            border: 1px solid #aaa;
            position: fixed;
            width: 250px;
            left: 50%;
            margin-left: -100px;
            padding: 6px 8px 8px;
            box-sizing: border-box;
            text-align: center;
         }
         #confirm button {
            background-color: #48E5DA;
            display: inline-block;
            border-radius: 5px;
            border: 1px solid #aaa;
            padding: 5px;
            text-align: center;
            width: 100px;
            cursor: pointer;
         }
         #confirm .message
         {
            text-align: left;
         }
      </style>
   </head>
   <body>
      <div id="confirm">
         <div class="message"></div>
         <button class="yes">Like!</button>
         <button class="no">No, I Like Cricket!</button>
      </div>
      <button onclick = 'functionConfirm("Do you like Football?", function yes()
      {
         alert("Yes")
      }, function no()
      {
         alert("no")
      });'>submit</button>
   </body>
</html>

코드 동작 원리

1. 커스텀 확인 함수 정의

functionConfirm(msg, myYes, myNo) 함수는 세 개의 인자를 받습니다. 첫 번째 인자는 화면에 표시할 메시지이며, 두 번째와 세 번째 인자는 각각 '예(yes)' 버튼과 '아니오(no)' 버튼을 클릭했을 때 실행될 콜백 함수입니다.

2. 메시지 표시 및 이벤트 바인딩

함수 내부에서는 #confirm 요소를 찾아 .message 영역에 전달받은 메시지를 삽입하고, .yes.no 버튼에 클릭 이벤트를 바인딩합니다. 특히 unbind()를 먼저 호출해 기존 이벤트를 제거하기 때문에 함수가 여러 번 실행되더라도 이벤트가 중복 등록되지 않습니다.

3. CSS 스타일링

#confirm 요소는 평소 display: none;으로 숨겨져 있다가, 함수가 호출되면 show()에 의해 화면 중앙에 고정된 작은 창 형태로 나타납니다. 버튼에는 배경색과 둥근 모서리(border-radius) 등이 적용되어 일반적인 모달 창 느낌을 줍니다.

실행 결과

submit 버튼을 클릭하면 "Do you like Football?"이라는 질문과 함께 Like!No, I Like Cricket!이라는 라벨이 붙은 두 개의 버튼이 표시됩니다. 각 버튼을 누르면 해당 콜백 함수가 실행되어 alert 창이 나타납니다.

참고: 최신 대안

jQuery 없이 구현하고 싶다면 HTML5의 <dialog> 요소나 Promise 기반 커스텀 모달을 활용하는 것도 좋은 방법입니다. 다만 위 예제처럼 직접 DOM을 제어하면 별도의 라이브러리 의존 없이 원하는 UI를 자유롭게 만들 수 있다는 장점이 있습니다.