“Evet” ve “hayır” seçenekleriyle bir iletişim kutusu nasıl oluşturulur?


658

Bir eylemde bulunmak ve verileri bir veritabanına kaydetmek için bir düğme yapacağım.

Kullanıcı düğmeyi tıkladığında, bir JavaScript uyarısının "evet" ve "iptal" seçenekleri sunmasını istiyorum. Kullanıcı "evet" i seçerse, veriler veritabanına eklenir, aksi takdirde herhangi bir işlem yapılmaz.

Böyle bir iletişim kutusunu nasıl görüntülerim?


2
@Szenis Oldukça ölü basit ve güzel bir tarz evet / hayır. XUL diyaloglarından da nefret ediyorum çünkü çok şey donduruyor. Çok teşekkür ederim.
m3nda

Yanıtlar:


1246

Muhtemelen confirm(), bir istem görüntüleyen ve geri dönen trueveya falsekullanıcının karar verdiklerine göre arıyorsunuz :

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
TAMAM ve İPTAL düğmelerinin bulunduğunu onaylayın. Bu düğmeler EVET / HAYIR olarak ayarlanabilir mi?
Owen

16
@Owen Hayır . Spesifikasyon sadece bir mesaj verebileceğinizi söylüyor. HTML'de bir iletişim kutusunu taklit edebilirsiniz (yerleşik iletişim kutusu gibi engellenmez). jQuery Dialog bu tür şeyleri uygulamanın iyi bir örneğidir.
s4y

3
not: returnbaşka bir içine koyabilirsiniz ve daha sonra onaylamak tüm kodunuzu sarmanıza gerek yok! (duruma göre düzeltme)
Jacob Raccuia

21
@JacobRaccuia Veya sadeceif(!confirm('message')) return;
Aaron

1
@Basit, şu anda özelleştirmenin bir yolu yok. Bu nedenle bazı web siteleri, yerel web siteleri yerine özel, sayfa içi iletişim kutuları kullanır.
s4y

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

window.confirmUyarı yerine kullanın . Bu işlevselliği elde etmenin en kolay yolu budur.


15
Bunun if(confirm("...")){yerine de gidebilirsiniz
Nicolas Bouliane

75

Bunu 'satır içi' JavaScript kullanarak nasıl yapabilirsiniz:

<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
Formun onubmit olayını işlemek daha iyidir: kodunuzla, kullanıcı metin girerse, form herhangi bir istek olmadan gönderilir!
p91paul

1
@ p91paul - Bu sizin için hangi tarayıcıda başarısız oluyor? Windows'ta IE, Chrome ve Safari'de enter tuşuna basmayı denedim ve beklendiği gibi çalıştı. jsfiddle.net/ALjge/1
dana

ne dediğimden emindim, ama test etmedim ve yanılmışım. afedersiniz!
p91paul

1
Sorun değil :) Bir kedinin derisini atmanın genellikle birden fazla yolu vardır. Sadece yaklaşımımın işe yaradığını doğrulamak istedim. <form onsubmit="...">Önerdiğiniz gibi kullanmak da işe yarıyor :)
dana

41

Satır içi JavaScript'ten kaçının - davranışı değiştirmek, kodun her örneğini düzenlemek anlamına gelir ve hoş değil!

Çok daha temiz bir yol, öğe üzerinde bir veri niteliği kullanmaktır data-confirm="Your message here". Aşağıdaki kodum, dinamik olarak oluşturulan öğeler dahil olmak üzere aşağıdaki işlemleri destekler:

  • ave buttontıklamalar
  • form gönderdiğinde
  • option seçer

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 demosu


2
Daha önce hiç düşünmediğim çok temiz bir çözüm. Yine de daha özlü olabilir:$("[data-confirm]").on('click,submit', function() { /* ... */ })
Umutsuzluğun Grimace

Özür dileriz, bir daha bakmaya direnemedim. İlk olarak: olaylar bir boşlukla ayrılmalıdır. İkincisi: jsfiddle.net/jguEg ;)
Despair Grimace

@GrimaceofDespair Kodu güncelledim, çünkü tıklayıp onayladıktan type="button"sonra kullanıcı formu göndermek isteyip istemediğini sordu (bir form öğesini tıklattığınız için), ki bu da yine Tamam'ı tıkladıktan sonra olmadı.
rybo111

İptal / Tamam düğmelerini yeniden adlandıramazsınız, ancak hepsi onayla () iletişim kutusunu kullanmak iyi örnekler: |
rogerdpack

@rogerdpack Evet, ancak veri özelliklerini kullanmanın güzelliği confirm(), HTML'yi değiştirmeden istediğinizi değiştirebilmenizdir.
rybo111

22

Custome confirmBox oluşturmanız gerekir, onaylama işlevi tarafından görüntülenen iletişim kutusundaki düğmeleri değiştirmek mümkün değildir.

Jquery onay kutusu


bu örneğe bakın: 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();
}

Kodunuzla arayın:

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

** Saf JavaScript onay kutusu **


Örnek : 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>

Senaryo :

<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
Çok güzel de .. oldukça basit, saf javascript ve o kadar çok css.
Sevdim

Bir öğeye basıldığında kutuların kaybolması gerektiğini onaylayın. Ayrıca kimlikler değil sınıflar kullanmalısınız.
rybo111

@rogerdpack Güncellenmiş keman bana bir şey gerekiyorsa bana bildirin :)
Keval Bhatt

@rogerdpack Eğer cevabı beğenirseniz oy kullanabilirsiniz: P
Keval Bhatt

@KevalBhatt, 'saf JS' sürümünüzü beğendim. Bir düğmeye bastıktan hemen sonra herhangi bir iletişim kutusunu kaldırmanın / gizlemenin / herhangi bir yolun var mı? Bir document.getElementById('id_confrmdiv').style.display="none";komut için yöntemde çalıştırılan tüm komutlardan sonra iletişim kutusunu gizlersem.
Andrii Muzychuk

13

Bu eklenti, kullanımı kolay jquery-onaylamanıza yardımcı olabilir

$.confirm({
    title: 'Confirm!',
    content: 'Simple confirm!',
    confirm: function(){
        alert('Confirmed!');
    },
    cancel: function(){
        alert('Canceled!')
    }
});

8

Ya da sadece:

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

1
Teşekkür ederim! Silmek için basit bir are-you-emin-istediğiniz-yapmak için basit CRUD uygulamamda jQuery eklemek zorunda olacağını korktum.
Matheson

7

onSubmitJS olayını kesebilirsiniz . Sonra bir onay uyarısı arayın ve sonucu alın.


5

Bunu yapmanın başka bir yolu:

$("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

Bu vanilya javascript kullanarak tam duyarlı bir çözüm:

// 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 basit bir API xdialog.confirm () sağlar . Kod snippet'i takip ediyor. Daha fazla demo burada bulunabilir

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>


Ne demek istediğini anlatmalısın // do work here... Fonksiyonları var mı YES TEXTve NO TEXToraya gidiyor mu?
kev

1
@kev, kullanıcı ok düğmesini seçtiğinde geri arama yapılır.
xia xiongjun

ve mantık nereye NO TEXTgidiyor?
kev

Öğesinin oncancelson parametre seçeneklerine bir seçenek ekleyebilirsiniz xdialog.confirm(text, onyes, options). Daha fazla ayrıntı için bkz. Xdialog varsayılan seçenekleri
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';       
   }
});

Üzgünüm, İspanyolca?
zixuan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.