브라우저에서 기본으로 제공되는 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를 자유롭게 만들 수 있다는 장점이 있습니다.