“예”및“아니요”옵션으로 대화 상자를 만드는 방법은 무엇입니까?


658

작업을 수행하고 데이터를 데이터베이스에 저장하는 버튼을 만들 것입니다.

사용자가 버튼을 클릭하면 JavaScript 경고가 "예"및 "취소"옵션을 제공하기를 원합니다. 사용자가 "yes"를 선택하면 데이터가 데이터베이스에 삽입되고, 그렇지 않으면 아무런 조치도 수행되지 않습니다.

이러한 대화 상자를 표시하려면 어떻게합니까?


2
@Szenis 예쁘고 단순한 스타일 예 / 아니요. 너무 많은 것들을 동결하기 때문에 XUL 대화 상자도 싫어요. 정말 고맙습니다.
m3nda

답변:


1246

confirm()프롬프트를 표시하고 반환 true하거나 false사용자가 결정한 내용에 따라를 찾고있을 것입니다 .

if (confirm('Are you sure you want to save this thing into the database?')) {
  // Save it!
  console.log('Thing was saved to the database.');
} else {
  // Do nothing!
  console.log('Thing was not saved to the database.');
}


125
확인 확인 및 취소 버튼이 있습니다. 이 버튼을 YES / NO로 설정할 수 있습니까?
Owen

16
@Owen 아니요 . 사양 은 메시지를 제공한다고 말합니다. HTML에서 대화 상자를 에뮬레이트 할 수 있습니다 (내장 대화 상자처럼 차단되지는 않지만). jQuery Dialog 는 이런 종류의 것을 구현하는 좋은 예입니다.
s4y

3
참고 : returnelse 안에 넣을 수 있으며 확인에 모든 코드를 감쌀 필요는 없습니다! (경우에 따라 사례 수정)
Jacob Raccuia

21
@JacobRaccuia 또는 간단히if(!confirm('message')) return;
Aaron

1
@Dimple 현재 사용자 정의 할 수있는 방법이 없습니다. 그렇기 때문에 일부 웹 사이트는 기본 대화 상자 대신 사용자 정의 인 페이지 대화 상자를 사용합니다.
s4y

90
var answer = window.confirm("Save data?")
if (answer) {
    //some code
}
else {
    //some code
}

window.confirm경고 대신 사용하십시오 . 이것이 해당 기능을 달성하는 가장 쉬운 방법입니다.


15
if(confirm("...")){대신에 대신 할 수도 있습니다
Nicolas Bouliane

75

'인라인'JavaScript를 사용하여이를 수행하는 방법 :

<form action="http://www.google.com/search">
  <input type="text" name="q" />
  <input type="submit" value="Go"
    onclick="return confirm('Are you sure you want to search Google?')"
  />
</form>

5
양식의 onsubmit 이벤트를 처리하는 것이 좋습니다. 코드를 사용하여 사용자가 텍스트를 입력하면 요청없이 양식이 제출됩니다!
p91paul

1
@ p91paul-어떤 브라우저가 실패합니까? 방금 Windows의 IE, Chrome 및 Safari에서 enter를 눌러 보았지만 예상대로 작동했습니다. jsfiddle.net/ALjge/1
dana

글쎄, 나는 내가 말한 것을 확신했지만 테스트하지 않았고 틀렸다. 죄송합니다!
p91paul

1
문제 없습니다 :) 일반적으로 고양이를 껍질을 벗기는 방법은 여러 가지가 있습니다. 방금 접근 방식이 제대로 작동하는지 확인하고 싶었습니다. <form onsubmit="...">제안한대로 사용하면 작동합니다 :)
dana

41

인라인 JavaScript를 피하십시오 -동작을 변경하면 코드의 모든 인스턴스를 편집하는 것이 의미가 있습니다.

보다 명확한 방법은와 같은 요소에서 data 속성을 사용하는 것 data-confirm="Your message here"입니다. 아래 코드는 동적으로 생성 된 요소를 포함하여 다음 작업을 지원합니다.

  • abutton클릭
  • form 제출하다
  • option 선택

jQuery :

$(document).on('click', ':not(form)[data-confirm]', function(e){
    if(!confirm($(this).data('confirm'))){
        e.stopImmediatePropagation();
        e.preventDefault();
    }
});

$(document).on('submit', 'form[data-confirm]', function(e){
    if(!confirm($(this).data('confirm'))){
        e.stopImmediatePropagation();
        e.preventDefault();
    }
});

$(document).on('input', 'select', function(e){
    var msg = $(this).children('option:selected').data('confirm');
    if(msg != undefined && !confirm(msg)){
        $(this)[0].selectedIndex = 0;
    }
});

HTML :

<!-- hyperlink example -->
<a href="http://www.example.com" data-confirm="Are you sure you want to load this URL?">Anchor</a>

<!-- button example -->
<button type="button" data-confirm="Are you sure you want to click the button?">Button</button>

<!-- form example -->
<form action="http://www.example.com" data-confirm="Are you sure you want to submit the form?">
    <button type="submit">Submit</button>
</form>

<!-- select option example -->
<select>
    <option>Select an option:</option>
    <option data-confirm="Are you want to select this option?">Here</option>
</select>

JSFiddle 데모


2
내가 생각하지 못한 매우 깨끗한 솔루션. 더 간결 할 수 있습니다 :$("[data-confirm]").on('click,submit', function() { /* ... */ })
절망의 그리움

죄송합니다. 다시 한 번 살펴볼 수 없습니다. 첫째 : 이벤트는 공백으로 구분해야합니다. 둘째, 당신은 여전히 코드 조여 수 jsfiddle.net/jguEg )
절망의 찌 푸 린 얼굴

@GrimaceofDespair 클릭하고 확인한 type="button"다음 사용자가 양식 요소를 클릭하기 때문에 양식을 제출할 것인지 묻는 메시지가 표시 되었으므로 확인을 다시 클릭 한 후에는 발생하지 않았으므로 코드를 업데이트했습니다.
rybo111

이들은 모두 확인 () 대화 상자를 사용하지만 Cancel / OK 버튼의 이름을 바꿀 수는 없지만 좋은 예입니다. |
rogerdpack 오전

@rogerdpack 예, 그러나 데이터 속성을 사용하는 것의 장점 confirm()은 HTML을 변경하지 않고도 원하는대로 변경할 수 있다는 것 입니다.
rybo111

22

custome confirmBox 를 작성해야하며 , 확인 기능으로 표시되는 대화 상자에서 단추를 변경할 수 없습니다.

jquery confirmBox


이 예를 참조하십시오 : https://jsfiddle.net/kevalbhatt18/6uauqLn6/

<div id="confirmBox">
    <div class="message"></div>
    <span class="yes">Yes</span>
    <span class="no">No</span>
</div>

function doConfirm(msg, yesFn, noFn)
{
    var confirmBox = $("#confirmBox");
    confirmBox.find(".message").text(msg);
    confirmBox.find(".yes,.no").unbind().click(function()
    {
        confirmBox.hide();
    });
    confirmBox.find(".yes").click(yesFn);
    confirmBox.find(".no").click(noFn);
    confirmBox.show();
}

코드로 호출하십시오.

doConfirm("Are you sure?", function yes()
{
    form.submit();
}, function no()
{
    // do nothing
});

** 순수한 JavaScript confirmBox **


: http://jsfiddle.net/kevalbhatt18/qwkzw3rg/127/

<div id="id_confrmdiv">confirmation
    <button id="id_truebtn">Yes</button>
    <button id="id_falsebtn">No</button>
</div>

<button onclick="doSomething()">submit</button>

스크립트 :

<script>

function doSomething(){
document.getElementById('id_confrmdiv').style.display="block"; //this is the replace of this line


document.getElementById('id_truebtn').onclick = function(){
   //do your delete operation
    alert('true');
};

document.getElementById('id_falsebtn').onclick = function(){
     alert('false');
   return false;
};
}
</script>

CSS :

body { font-family: sans-serif; }
#id_confrmdiv
{
    display: none;
    background-color: #eee;
    border-radius: 5px;
    border: 1px solid #aaa;
    position: fixed;
    width: 300px;
    left: 50%;
    margin-left: -150px;
    padding: 6px 8px 8px;
    box-sizing: border-box;
    text-align: center;
}
#id_confrmdiv button {
    background-color: #ccc;
    display: inline-block;
    border-radius: 3px;
    border: 1px solid #aaa;
    padding: 2px;
    text-align: center;
    width: 80px;
    cursor: pointer;
}
#id_confrmdiv .button:hover
{
    background-color: #ddd;
}
#confirmBox .message
{
    text-align: left;
    margin-bottom: 8px;
}


2
너무 멋져요. 아주 단순하고 순수한 자바 스크립트와 CSS는 그리 많지 않습니다. 그 것처럼 : D
m3nda

항목을 누르면 확인 상자가 사라져야합니다. 또한 ID가 아닌 클래스를 사용해야합니다.
rybo111

나는 바이올린 업데이트 @rogerdpack 것은 알려 경우 내 옆 :)에서 필요 아무것도
Keval 밧

@ rogerdpack 당신이 대답을 좋아한다면 당신은 투표 할 수 있습니다 : P
Keval Bhatt

@ KevalBhatt, 나는 당신의 '순수 JS'버전을 좋아합니다. 버튼을 눌렀을 때 바로 대화 상자를 제거 / 숨기기 / 어떻게 할 수 있습니까? 버튼을 넣으 document.getElementById('id_confrmdiv').style.display="none";려면 모든 명령을 실행 한 후에 대화 상자를 숨기면 숨겨집니다.
Andrii Muzychuk


8

또는 간단히 :

<a href="https://some-link.com/" onclick="return confirm('Are you sure you want to go to that link?');">click me!</a>

1
감사합니다! 간단한 CRUD 응용 프로그램에 jQuery를 포함 시켜서 삭제하고 싶을 것입니다.
Will Matheson

7

onSubmit이벤트가 JS 인 이벤트 를 가로 챌 수 있습니다 . 그런 다음 확인 알림을 호출하고 결과를 가져옵니다.


5

이를 수행하는 다른 방법 :

$("input[name='savedata']").click(function(e){
       var r = confirm("Are you sure you want to save now?");

       //cancel clicked : stop button default action 
       if (r === false) {
           return false;
        }

        //action continues, saves in database, no need for more code


   });

5

이것은 바닐라 자바 ​​스크립트를 사용하는 완전 반응 형 솔루션입니다.

// Call function when show dialog btn is clicked
document.getElementById("btn-show-dialog").onclick = function(){show_dialog()};
var overlayme = document.getElementById("dialog-container");

function show_dialog() {
 /* A function to show the dialog window */
    overlayme.style.display = "block";
}

// If confirm btn is clicked , the function confim() is executed
document.getElementById("confirm").onclick = function(){confirm()};
function confirm() {
 /* code executed if confirm is clicked */   
    overlayme.style.display = "none";
}

// If cancel btn is clicked , the function cancel() is executed
document.getElementById("cancel").onclick = function(){cancel()};
function cancel() {
 /* code executed if cancel is clicked */  
    overlayme.style.display = "none";
}
.popup {
  width: 80%;
  padding: 15px;
  left: 0;
  margin-left: 5%;
  border: 1px solid rgb(1,82,73);
  border-radius: 10px;
  color: rgb(1,82,73);
  background: white;
  position: absolute;
  top: 15%;
  box-shadow: 5px 5px 5px #000;
  z-index: 10001;
  font-weight: 700;
  text-align: center;
}

.overlay {
  position: fixed;
  width: 100%;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background: rgba(0,0,0,.85);
  z-index: 10000;
  display :none;
}

@media (min-width: 768px) {
  .popup {
    width: 66.66666666%;
    margin-left: 16.666666%;
  }
}
@media (min-width: 992px) {
  .popup {
    width: 80%;
    margin-left: 25%;
  }
}
@media (min-width: 1200px) {
  .popup {
    width: 33.33333%;
    margin-left: 33.33333%;
  }
}

.dialog-btn {
  background-color:#44B78B;
  color: white;
  font-weight: 700;
  border: 1px solid #44B78B;
  border-radius: 10px;
  height: 30px;
  width: 30%;
}
.dialog-btn:hover {
  background-color:#015249;
  cursor: pointer;
}
<div id="content_1" class="content_dialog">
    <p>Lorem ipsum dolor sit amet. Aliquam erat volutpat. Maecenas non tortor nulla, non malesuada velit.</p>
    <p>Aliquam erat volutpat. Maecenas non tortor nulla, non malesuada velit. Nullam felis tellus, tristique nec egestas in, luctus sed diam. Suspendisse potenti.</p>
</div>

<button id="btn-show-dialog">Ok</button>


<div class="overlay" id="dialog-container">
  <div class="popup">
    <p>This will be saved. Continue ?</p>
    <div class="text-right">
      <button class="dialog-btn btn-cancel" id="cancel">Cancel</button>
      <button class="dialog-btn btn-primary" id="confirm">Ok</button>
    </div>
  </div>
</div>


3

xdialog 는 간단한 API xdialog.confirm ()을 제공합니다. 코드 스 니펫은 다음과 같습니다. 더 많은 데모는 여기 에서 찾을 수 있습니다

document.getElementById('test').addEventListener('click', test);

function test() {
  xdialog.confirm('Are you sure?', function() {
    // do work here if ok/yes selected...
    console.info('Done!');
  }, {
    style: 'width:420px;font-size:0.8rem;',
    buttons: {
      ok: 'yes text',
      cancel: 'no text'
    },
    oncancel: function() {
      console.warn('Cancelled!');
    }
  });
}
<link href="https://cdn.jsdelivr.net/gh/xxjapp/xdialog@3/xdialog.min.css" rel="stylesheet"/>
<script src="https://cdn.jsdelivr.net/gh/xxjapp/xdialog@3/xdialog.min.js"></script>
<button id="test">test</button>


당신은 당신이 무슨 뜻인지 설명해야합니다 // do work here... 의 기능을 수행 YES TEXT하고 NO TEXT거기에 갈?
kev

1
@kev, 사용자가 확인 버튼을 선택하면 콜백이 실행됩니다.
xia xiongjun 1

그리고 논리는 NO TEXT어디로 가나 요?
kev

oncancel의 마지막 매개 변수 옵션에 옵션을 추가 할 수 있습니다 xdialog.confirm(text, onyes, options). 자세한 내용은 다음을 참조하십시오 xdialog 기본 - 옵션
쌰 xiongjun

-2
document.getElementById("button").addEventListener("click", function(e) {
   var cevap = window.confirm("Satın almak istediğinizden emin misiniz?");
   if (cevap) {
     location.href='Http://www.evdenevenakliyat.net.tr';       
   }
});

죄송합니다, 스페인어?
zixuan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.