Come mostrare un messaggio di conferma prima di eliminare?


204

Voglio ricevere un messaggio di conferma facendo clic su Elimina (questo forse un pulsante o un'immagine). Se l'utente seleziona " Ok", l'eliminazione viene eseguita, altrimenti se "Cancel fa clic su ' non accade nulla.

Ho provato a fare eco questo quando si è fatto clic sul pulsante, ma l'eco delle cose fa sì che le mie caselle di input e le caselle di testo perdano il loro stile e design.

Risposte:


330

Scrivi questo in onclickcaso di pulsante:

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

risposta brillante! breve, preciso e funziona in modo efficiente
John,

Per qualsiasi persona JavaScript non esperta, le tue righe di codice non significano nulla, l'esempio sembra inconcludente e confuso. Tuttavia, è una buona risposta.
Samuel Ramzan,

Penso che dovresti aggiungere alcuni dettagli alla tua risposta. Perché inserisci il codice all'interno del pulsante invece di scriverlo nella sezione head o in un file esterno? Questa è una funzione molto generica e il programmatore potrebbe voler usarla più volte per diversi pulsanti, non lo scriverei in un singolo pulsante specifico ...
franz1

286

Puoi usare meglio come segue

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

2
Questo dovrebbe essere molto in alto nel thread. Semplice, veloce, efficace. Fa il lavoro alla perfezione.
DonExo,

Molto pericoloso! Cosa succede se Javascript è stato disattivato? O se un ragno / bot di ricerca leggesse questa pagina? Seguirà quindi tutti i collegamenti ed eliminerebbe tutto! Alcuni plugin del browser seguono anche tutti i collegamenti in una pagina per pre-cache. MAI farlo in questo modo! Le eliminazioni non dovrebbero mai essere una richiesta GET.
Daniele Testa,

Non è meno pericoloso della risposta # 1 in barca, qualsiasi JavaScript è pericoloso se JavaScript è disattivato. L'attivazione o la disattivazione di JavaScript è una scelta personale dell'utente, se JavaScript è disattivato, l'utente dovrebbe conoscere meglio di non premere alcun pulsante su alcun sito Web. C'è sempre la verifica lato server come una meravigliosa alternativa.
Samuel Ramzan,

53

Ecco come lo faresti con JavaScript discreto e il messaggio di conferma contenuto nell'HTML.

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

Questo è puro vaniglia JS, compatibile con 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');
      }
  });
}

Guardalo in azione: http://codepen.io/anon/pen/NqdKZq


Funziona perfettamente, ma funziona solo per il primo pulsante. E se ne avessimo 20 o più? Grazie!
emotività

1
Hai ragione, è perché querySelector corrisponde solo al primo elemento. Ho modificato la risposta e ho modificato il codice per utilizzare querySelectorAll.
DevAntoine,

Sarebbe bello se questo esempio venisse modificato per funzionare anche con JavaScript disabilitato, ad esempio, href="https://stackoverflow.com/delete"basterebbe a pensare. O un modulo invia esempio.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

1
@CiroSantilli 巴拿馬 文件 六四 事件 法轮功 È già il caso grazie alla funzione event.preventDefault (). Puoi sostituire il carattere hash con un URL, non verrà attivato. Se JavaScript è disabilitato, il collegamento funzionerà come previsto.
DevAntoine,

1
@CiroSantilli 巴拿馬 文件 六四 事件 法轮功 Here you go;)
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()">

Penso che sia meglio avere solo 1 punto di ritorno. quindi preferisco
jedi

17
O semplicemente return confirm("…"). Non è necessario assegnare una variabile booleana e quindi diramare in if / else.
slhck,

16

Prova questo. Per me funziona

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

1
Bello ed efficiente.
Samuel Ramzan,

13

è molto semplice e una riga di codice

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

Sembra che ci sia già una risposta come questa appena sotto la risposta accettata.
cappello

12

migliorare su user1697128 (perché non posso ancora commentarlo)

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

annullerà l'invio del modulo se si preme annulla


8

Vorrei offrire il modo in cui lo faccio:

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

Utilizzando jQuery:

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

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

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

Una buona jQuery adattamento di DevAntoines risposta ( stackoverflow.com/a/19973570/1337887 ). Tuttavia, un approccio leggermente più generalizzato sarebbe quello di utilizzare "$ ('A [data-confirm]')" anziché "$ ('. Delete')". In questo modo, non è necessario che i pulsanti abbiano una classe di eliminazione, ma invece integrare semplicemente l'attributo di conferma dei dati.
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

Se sei interessato a una soluzione piuttosto veloce con il formato CSS fatto, puoi usare 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

impostare un messaggio di conformazione quando elimini qualcosa in php & mysql ...

usa questo codice di script:

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

usa questo codice 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

Utilizzando jQuery:

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

1

So che questo è vecchio, ma avevo bisogno di una risposta e non di queste, ma la risposta di Alpesh ha funzionato per me e volevo condividere con persone che potrebbero avere lo stesso problema.

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

Versione normale:

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

La mia versione di PHP:

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

Questo potrebbe non essere il modo corretto di farlo pubblicamente, ma ha funzionato per me su un sito privato. :)


1

È molto semplice

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>

il tuo link per questo:

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

0

Il gestore onclick dovrebbe restituire false dopo la chiamata di funzione. Per es.

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


0

Penso che la soluzione più semplice e discreta sarebbe:

link:

<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

Ecco un altro semplice esempio in JS puro che usa className e l'evento di associazione ad esso.

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>

chiama questa funzione usando onClick


0

Per "messaggio di conferma sull'eliminazione" utilizzare:

                       $.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 con Javascript Elimina esempio

codice 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" è qualsiasi variabile angularjs supponiamo di voler passare qualsiasi parametro durante l'azione di eliminazione

Codice Angularjs all'interno del modulo dell'app

$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

È molto più difficile farlo per selezionare caselle di opzioni. Ecco la soluzione:

<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

Sto usando in questo modo (in 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>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.