วิธีสร้างกล่องโต้ตอบด้วยตัวเลือก“ ใช่” และ“ ไม่”


658

ฉันจะสร้างปุ่มเพื่อดำเนินการและบันทึกข้อมูลลงในฐานข้อมูล

เมื่อผู้ใช้คลิกที่ปุ่มฉันต้องการแจ้งเตือน JavaScript เพื่อเสนอตัวเลือก“ ใช่” และ“ ยกเลิก” หากผู้ใช้เลือก“ ใช่” ข้อมูลจะถูกแทรกลงในฐานข้อมูลมิฉะนั้นจะไม่มีการดำเนินการใด ๆ

ฉันจะแสดงกล่องโต้ตอบดังกล่าวได้อย่างไร


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
ยืนยันว่ามีปุ่ม OK และ CANCEL ปุ่มเหล่านี้สามารถตั้งค่าเป็น YES / NO ได้หรือไม่?
โอเวน

16
@ โอเว่นไม่ข้อมูลจำเพาะบอกว่าคุณเพิ่งได้รับข้อความ คุณสามารถเลียนแบบการโต้ตอบใน HTML (แม้ว่ามันจะไม่บล็อกเหมือนในตัว) jQuery Dialogเป็นตัวอย่างที่ดีของการใช้สิ่งนี้
s4y

3
หมายเหตุ: คุณสามารถใส่returnส่วนอื่นแล้วไม่ต้องใส่รหัสทั้งหมดในการยืนยัน! (กรณีโดยการแก้ไขกรณี)
Jacob Raccuia

21
@JacobRaccuia หรือเพียงแค่if(!confirm('message')) return;
แอรอน

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 'inline':

<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
มันจะดีกว่าที่จะจัดการกับการส่งเหตุการณ์ของแบบฟอร์ม: ด้วยรหัสของคุณหากผู้ใช้กดป้อนข้อความแบบฟอร์มจะถูกส่งโดยไม่มีการร้องขอใด ๆ !
p91paul

1
@ p91paul - เบราว์เซอร์ใดที่ล้มเหลวสำหรับคุณ ฉันลองกด enter ใน IE, Chrome และ Safari บน Windows และทำงานได้ตามที่คาดไว้ jsfiddle.net/ALjge/1
dana

ฉันแน่ใจในสิ่งที่ฉันกำลังพูด แต่ฉันยังไม่ได้ทดสอบและฉันผิด ขออภัย!
p91paul

1
ไม่มีปัญหา :) โดยทั่วไปมีวิธีการแมวมากกว่าหนึ่งวิธี ฉันแค่ต้องการยืนยันว่าวิธีการของฉันใช้งานได้ ใช้<form onsubmit="...">ตามที่คุณแนะนำก็เช่นกัน :)
dana

41

หลีกเลี่ยง JavaScript แบบอินไลน์ - การเปลี่ยนพฤติกรรมจะหมายถึงการแก้ไขโค้ดทุกครั้งและมันก็ไม่สวย

data-confirm="Your message here"วิธีทำความสะอาดมากคือการใช้แอตทริบิวต์ข้อมูลเกี่ยวกับองค์ประกอบเช่น รหัสของฉันด้านล่างรองรับการกระทำต่อไปนี้รวมถึงองค์ประกอบที่สร้างขึ้นแบบไดนามิก:

  • aและbuttonคลิก
  • 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() { /* ... */ })
หน้าตาบูดบึ้งของ Despair

ขออภัยไม่สามารถต้านทานได้อีกครั้ง ครั้งแรก: เหตุการณ์ควรคั่นด้วยช่องว่าง ประการที่สอง: คุณยังสามารถกระชับรหัสjsfiddle.net/jguEg ;)
หน้าตาบูดบึ้งของ Despair

@GrimaceofDespair ฉันได้อัปเดตรหัสแล้วเพราะการคลิกและการยืนยันtype="button"แล้วถามว่าผู้ใช้ต้องการที่จะส่งแบบฟอร์ม (เพราะคุณกำลังคลิกองค์ประกอบของแบบฟอร์ม) ซึ่งเห็นได้ชัดว่าไม่ได้เกิดขึ้นหลังจากคลิกตกลงอีกครั้ง
rybo111

นี่เป็นตัวอย่างที่ดีแม้ว่าพวกเขาทั้งหมดจะใช้กล่องโต้ตอบ confirm () เพื่อให้คุณไม่สามารถเปลี่ยนชื่อปุ่มยกเลิก / ตกลง: |
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 แท้ๆ


ตัวอย่าง : 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

กล่องยืนยันควรหายไปเมื่อกดรายการ นอกจากนี้คุณควรใช้คลาสไม่ใช่รหัส
rybo111

@rogerdpack ฉันปรับปรุงซอแจ้งให้เราทราบว่าต้องการอะไรจากด้านข้างของฉัน :)
Keval Bhatt

@rogerdpack ถ้าคุณชอบคำตอบคุณสามารถโหวตได้: P
Keval Bhatt

@KevalBhatt ฉันชอบเวอร์ชั่น 'pure 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
ขอบคุณ! ฉันกลัวว่าฉันจะต้องรวม jQuery ในแอพ CRUD ที่เรียบง่ายของฉันเพื่อทำสิ่งที่ง่ายคุณแน่ใจว่าคุณต้องการลบสิ่งนี้
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

นี่เป็นโซลูชันที่ตอบสนองอย่างสมบูรณ์โดยใช้ vanilla javascript:

// 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

และตรรกะNO TEXTจะไปที่ไหน?
kev

คุณสามารถเพิ่มตัวเลือกตัวเลือกสุดท้ายของพารามิเตอร์oncancel xdialog.confirm(text, onyes, options)ดูรายละเอียดเพิ่มเติมได้ที่: xdialog default-options
xia 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.