Jak wyświetlić wiadomość potwierdzającą przed usunięciem?


204

Chcę otrzymać wiadomość potwierdzającą po kliknięciu przycisku Usuń (może to być przycisk lub obraz). Jeśli użytkownik wybierze „ Ok”, usunięcie zostanie wykonane, w przeciwnym razie po Cancelkliknięciu „ ” nic się nie stanie.

Próbowałem powtórzyć to po kliknięciu przycisku, ale echo powoduje, że moje pola wprowadzania i pola tekstowe tracą swój styl i wygląd.

Odpowiedzi:


330

Napisz to w onclickprzypadku przycisku:

var result = confirm("Want to delete?");
if (result) {
    //Logic to delete the item
}

genialna odpowiedź! krótki, precyzyjny i działa sprawnie
Jan

Dla osoby, która nie ma doświadczenia w JavaScript, linie kodu nic nie znaczą, przykład wydaje się niejednoznaczny i mylący. Niemniej jednak jest to dobra odpowiedź.
Samuel Ramzan

Myślę, że powinieneś dodać kilka szczegółów do swojej odpowiedzi. Dlaczego wstawiasz kod do przycisku zamiast pisać go w sekcji nagłówka lub w pliku zewnętrznym? Jest to bardzo ogólna funkcja i programista może chcieć użyć jej kilka razy dla kilku przycisków, nie
zapisałbym

285

Możesz lepiej użyć w następujący sposób

 <a href="url_to_delete" onclick="return confirm('Are you sure you want to delete this item?');">Delete</a>

2
To powinno być wysoko w wątku. Prosty, szybki, skuteczny. Wykonuje pracę idealnie.
DonExo

Bardzo niebezpieczne! Co się stanie, jeśli JavaScript zostanie wyłączony? A może jeśli pająk / bot wyszukiwania przeczyta tę stronę? Następnie podążyłby za wszystkimi linkami i usunął wszystko! Niektóre wtyczki do przeglądarek również podążają za wszystkimi linkami na stronie, aby wstępnie buforować. NIGDY nie rób tego w ten sposób! Usunięcia nigdy nie powinny być żądaniem GET.
Daniele Testa

Jest nie mniej niebezpieczny niż odpowiedź nr 1, każdy JavaScript jest niebezpieczny, jeśli JavaScript jest wyłączony. Włączanie i wyłączanie JavaScript jest osobistym wyborem użytkownika. Jeśli JavaScript jest wyłączony, użytkownik powinien wiedzieć, że nie należy naciskać żadnych przycisków na żadnej stronie internetowej. Zawsze istnieje weryfikacja po stronie serwera jako wspaniała alternatywa.
Samuel Ramzan

53

W ten sposób zrobiłbyś to przy dyskretnym JavaScript i komunikat potwierdzający jest przechowywany w HTML.

<a href="/delete" class="delete" data-confirm="Are you sure to delete this item?">Delete</a>

To jest czysta waniliowa JS, kompatybilna z IE 9+:

var deleteLinks = document.querySelectorAll('.delete');

for (var i = 0; i < deleteLinks.length; i++) {
  deleteLinks[i].addEventListener('click', function(event) {
      event.preventDefault();

      var choice = confirm(this.getAttribute('data-confirm'));

      if (choice) {
        window.location.href = this.getAttribute('href');
      }
  });
}

Zobacz to w akcji: http://codepen.io/anon/pen/NqdKZq


Działa to doskonale, ale działa tylko w przypadku pierwszego przycisku. Co jeśli mamy ich 20 lub więcej? Dzięki!
emocje

1
Masz rację, to dlatego, że querySelector dopasowuje tylko pierwszy element. Zredagowałem odpowiedź i rozwidliłem codepen, aby zamiast tego użyć querySelectorAll.
DevAntoine

Byłoby fajnie, gdyby ten przykład był edytowany tak, aby działał również z wyłączoną obsługą JavaScript, np. href="https://stackoverflow.com/delete"Myślę, że wystarczy. Lub formularz prześlij przykład.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

1
@CiroSantilli 巴拿馬 文件 六四 事件 法轮功 Tak już jest dzięki funkcji event.preventDefault (). Możesz zastąpić hash char adresem URL, nie zostanie on uruchomiony. Ale jeśli JavaScript jest wyłączony, link będzie działał zgodnie z oczekiwaniami.
DevAntoine

1
@CiroSantilli 巴拿馬 文件 六四 事件 法轮功 Proszę bardzo;)
DevAntoine

28
function ConfirmDelete()
{
  var x = confirm("Are you sure you want to delete?");
  if (x)
      return true;
  else
    return false;
}


<input type="button" onclick="ConfirmDelete()">

Myślę, że lepiej mieć tylko 1 punkt zwrotny. więc wolę
jedi

17
Lub po prostu return confirm("…"). Nie ma potrzeby przypisywania zmiennej boolean, a następnie rozgałęzienia do if / else.
slhck

16

Spróbuj tego. Mi to pasuje

 <a href="delete_methode_link" onclick="return confirm('Are you sure you want to Remove?');">Remove</a>

1
Piękny i wydajny.
Samuel Ramzan

13

jest bardzo prosty i zawiera jedną linię kodu

<a href="#" title="delete" class="delete" onclick="return confirm('Are you sure you want to delete this item')">Delete</a>

Wygląda na to, że już pod taką odpowiedzią jest już taka odpowiedź.
kapelusz

12

poprawa na user1697128 (ponieważ nie mogę jeszcze komentować)

<script>
    function ConfirmDelete()
    {
      var x = confirm("Are you sure you want to delete?");
      if (x)
          return true;
      else
        return false;
    }
</script>    

<button Onclick="return ConfirmDelete();" type="submit" name="actiondelete" value="1"><img src="images/action_delete.png" alt="Delete"></button>

anuluje przesłanie formularza, jeśli zostanie anulowane


8

Chciałbym zaoferować sposób, w jaki to robię:

<form action="/route" method="POST">
<input type="hidden" name="_method" value="DELETE"> 
<input type="hidden" name="_token" value="the_token">
<button type="submit" class="btn btn-link" onclick="if (!confirm('Are you sure?')) { return false }"><span>Delete</span></button>
</form>

6

HTML

<input onclick="return myConfirm();" type="submit" name="deleteYear" class="btn btn-danger" value="Delete">

JavaScript

<script>
function myConfirm() {
  var result = confirm("Want to delete?");
  if (result==true) {
   return true;
  } else {
   return false;
  }
}


4

HTML:

<a href="#" class="delete" data-confirm="Are you sure to delete this item?">Delete</a>

Korzystanie z jQuery:

$('.delete').on("click", function (e) {
    e.preventDefault();

    var choice = confirm($(this).attr('data-confirm'));

    if (choice) {
        window.location.href = $(this).attr('href');
    }
});

Dobra adaptacja DevAntoines dla jQuery ( stackoverflow.com/a/19973570/1337887 ). Jednak nieco bardziej uogólnionym podejściem byłoby użycie „$ („ A [potwierdzenie danych] ”)” zamiast „$ („. Delete ”)”. W ten sposób nie potrzebujesz przycisków, aby mieć klasę usuwania, ale zamiast tego po prostu zintegruj atrybut potwierdzenia danych.
Florian


4
<a href="javascript:;" onClick="if(confirm('Are you sure you want to delete this product')){del_product(id);}else{ }" class="btn btn-xs btn-danger btn-delete" title="Del Product">Delete Product</a>

<!-- language: lang-js -->
<script>
function del_product(id){
    $('.process').css('display','block');
    $('.process').html('<img src="./images/loading.gif">');
    $.ajax({
        'url':'./process.php?action=del_product&id='+id,
        'type':"post",
        success: function(result){
            info=JSON.parse(result);
            if(result.status==1){
                setTimeout(function(){
                    $('.process').hide();
                    $('.tr_'+id).hide();
                },3000);
                setTimeout(function(){
                    $('.process').html(result.notice);
                },1000);
            } else if(result.status==0){
                setTimeout(function(){
                    $('.process').hide();
                },3000);
                setTimeout(function(){
                    $('.process').html(result.notice);
                },1000);
            }
        }
    });
}
</script>


3

Jeśli jesteś zainteresowany szybkim ładnym rozwiązaniem z gotowym formatem css, możesz użyć SweetAlert

$(function(){
  $(".delete").click(function(){
      swal({   
	  	  title: "Are you sure?",   
		  text: "You will not be able to recover this imaginary file!",   
		  type: "warning",   
		  showCancelButton: true,   
	  	  confirmButtonColor: "#DD6B55",   
	  	  confirmButtonText: "Yes, delete it!",   
	  	  closeOnConfirm: false 
	  }, 
	  function(isConfirmed){ 
        if(isConfirmed) {
          $(".file").addClass("isDeleted");
          swal("Deleted!", "Your imaginary file has been deleted.", "success"); 
        }
      }
    );
  });
});
html { zoom: 0.7 } /* little "hack" to make example visible in stackoverflow snippet preview */
body > p { font-size: 32px }

.delete { cursor: pointer; color: #00A }
.isDeleted { text-decoration:line-through }
<script src="https://code.jquery.com/jquery-2.1.3.min.js"></script>
<script src="http://t4t5.github.io/sweetalert/dist/sweetalert-dev.js"></script>
<link rel="stylesheet" href="http://t4t5.github.io/sweetalert/dist/sweetalert.css">

<p class="file">File 1 <span class="delete">(delete)</span></p>


2

ustawić komunikat o zgodności po usunięciu czegoś w php i mysql ...

użyj tego kodu skryptu:

<script>
    function Conform_Delete()
    {
       return conform("Are You Sure Want to Delete?");
    }
</script>

użyj tego kodu HTML:

<a onclick="return Conform_Delete()" href="#">delete</a>

2
var txt;
var r = confirm("Press a button!");
if (r == true) {
   txt = "You pressed OK!";
} else {
   txt = "You pressed Cancel!";
}

var txt;
var r = confirm("Press a button!");
if (r == true) {
    txt = "You pressed OK!";
} else {
    txt = "You pressed Cancel!";
}


1

Korzystanie z jQuery:

$(".delete-link").on("click", null, function(){
        return confirm("Are you sure?");
    });

1

Wiem, że to stare, ale potrzebowałem odpowiedzi, ale żadna z nich, ale odpowiedź alpesh działała dla mnie i chciałem podzielić się z ludźmi, którzy mogli mieć ten sam problem.

<script>    
function confirmDelete(url) {
    if (confirm("Are you sure you want to delete this?")) {
        window.open(url);
    } else {
        false;
    }       
}
</script>

Wersja normalna:

<input type="button" name="delete" value="Delete" onClick="confirmDelete('delete.php?id=123&title=Hello')">

Moja wersja PHP:

$deleteUrl = "delete.php?id=" .$id. "&title=" .$title;
echo "<input type=\"button\" name=\"delete\" value=\"Delete\" onClick=\"confirmDelete('" .$deleteUrl. "')\"/>";

To może nie być poprawny sposób, aby to zrobić publicznie, ale działało to dla mnie na prywatnej stronie. :)


1

To jest bardzo proste

function archiveRemove(any) {
    var click = $(any);
    var id = click.attr("id");
    swal.fire({
        title: 'Are you sure !',
           text: "?????",
           type: 'warning',
           showCancelButton: true,
           confirmButtonColor: '#3085d6',
           cancelButtonColor: '#d33',
           confirmButtonText: 'yes!',
           cancelButtonText: 'no'
    }).then(function (success) {
        if (success) {
            $('a[id="' + id + '"]').parents(".archiveItem").submit();
        }
    })
}

0
function del_confirm(msg,url)
        {
            if(confirm(msg))
            {
                window.location.href=url
            }
            else
            {
                false;
            }

        }



<a  onclick="del_confirm('Are you Sure want to delete this record?','<filename>.php?action=delete&id=<?<id> >')"href="#"></a>

0
<SCRIPT LANGUAGE="javascript">
function Del()
{
var r=confirm("Are you sure?")
if(r==true){return href;}else{return false;}
}
</SCRIPT>

Twój link do niego:

<a href='edit_post.php?id=$myrow[id]'> Delete</a>

0

Program obsługi onclick powinien zwracać wartość false po wywołaniu funkcji. Na przykład

onclick="ConfirmDelete(); return false;">


0

Myślę, że najprostszym dyskretnym rozwiązaniem byłoby:

Połączyć:

<a href="http://link_to_go_to_on_success" class="delete">Delete</a>

JavaScript:

$('.delete').click(function () {
    return confirm("Are you sure?");
});

0
<a href="javascript:;" onClick="if(confirm('Are you sure you want to delete this product')){del_product(id);}else{ }" class="btn btn-xs btn-danger btn-delete" title="Del Product">Delete Product</a>


function del_product(id){
    $('.process').css('display','block');
    $('.process').html('<img src="./images/loading.gif">');
    $.ajax({
        'url':'./process.php?action=del_product&id='+id,
        'type':"post",
        success: function(result){
            info=JSON.parse(result);
            if(result.status==1){
            setTimeout(function(){
                    $('.process').hide();
                    $('.tr_'+id).hide();
                },3000);
                setTimeout(function(){
                    $('.process').html(result.notice);
                },1000);
            }else if(result.status==0){
                setTimeout(function(){
                    $('.process').hide();
                },3000);
                setTimeout(function(){
                    $('.process').html(result.notice);
                },1000);

                }
            }
        });
}

0

Oto kolejny prosty przykład w czystym JS z wykorzystaniem className i powiązania z nim zdarzenia.

var eraseable =  document.getElementsByClassName("eraseable");

for (var i = 0; i < eraseable.length; i++) {
    eraseable[i].addEventListener('click', delFunction, false); //bind delFunction on click to eraseables
}

function delFunction(){        
     var msg = confirm("Are you sure?");      
     if (msg == true) { 
        this.remove(); //remove the clicked element if confirmed
    }   
  };
<button class="eraseable">
<img class="eraseable" src="http://zelcs.com/wp-content/uploads/2013/02/stackoverflow-logo-dumpster.jpg" style="width:100px;height:auto;">
Delete me</button>

<button class="eraseable">
<img class="eraseable" src="http://zelcs.com/wp-content/uploads/2013/02/stackoverflow-logo-dumpster.jpg" style="width:100px;height:auto;">
Delete me</button>

<button class="eraseable">
<img class="eraseable" src="http://zelcs.com/wp-content/uploads/2013/02/stackoverflow-logo-dumpster.jpg" style="width:100px;height:auto;">
Delete me</button>


0
<script>
function deleteItem()
{
   var resp = confirm("Do you want to delete this item???");
   if (resp == true) {
      //do something
   } 
   else {
      //do something
   }
}
</script>

wywołać tę funkcję za pomocą onClick


0

Do „komunikatu potwierdzającego usunięcie” użyj:

                       $.ajax({
                        type: "POST",
                        contentType: "application/json; charset=utf-8",
                        url: "Searching.aspx/Delete_Student_Data",
                        data: "{'StudentID': '" + studentID + "'}",
                        dataType: "json",
                        success: function (data) {
                            alert("Delete StudentID Successfully");
                            return true;
                        }

0

Angularjs z JavaScript Usuń przykład

Kod HTML

<button ng-click="ConfirmDelete(single_play.play_id)" type="submit" name="actiondelete" value="1"><img src="images/remove.png" alt="Delete"></button>

„single_play.play_id” to dowolna zmienna angularjs, załóżmy, że chcesz przekazać dowolny parametr podczas akcji usuwania

Kod Angularjs wewnątrz modułu aplikacji

$scope.ConfirmDelete = function(yy)
        {
            var x = confirm("Are you sure you want to delete?");
            if (x) {
             // Action for press ok
                $http({
                method : 'POST',
                url : 'sample.php',
                headers: {'Content-Type': 'application/x-www-form-urlencoded'},
                data: $.param({ delete_play_id : yy})
                }).then(function (response) { 
                $scope.message = response.data;
                });
            }
            else {
             //Action for cancel
                return false;
            }
        } 

0

Znacznie trudniej jest to zrobić dla wybranych pól opcji. Oto rozwiązanie:

<select onchange="if (this.value == 'delete' && !confirm('THIS ACTION WILL DELETE IT!\n\nAre you sure?')){this.value=''}">
    <option value=''> &nbsp; </option>
    <option value="delete">Delete Everything</option>
</select>

0

Używam w ten sposób (w laravel) -

<form id="delete-{{$category->id}}" action="{{route('category.destroy',$category->id)}}" style="display: none;" method="POST">
 @csrf
 @method('DELETE')
</form>

<a href="#" onclick="if (confirm('Are you sure want to delete this item?')) {
           event.preventDefault();
           document.getElementById('delete-{{$category->id}}').submit();
         }else{
           event.preventDefault();
         }">
  <i class="fa fa-trash"></i>
</a>
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.