¿Cómo mostrar un mensaje de confirmación antes de eliminar?

204

Quiero recibir un mensaje de confirmación al hacer clic en Eliminar (esto puede ser un botón o una imagen). Si el usuario selecciona " Ok", se elimina, de lo contrario, si Cancelse hace clic en " ", no sucede nada.

Intenté hacer eco de esto cuando se hizo clic en el botón, pero hacer eco de cosas hace que mis cuadros de entrada y cuadros de texto pierdan su estilo y diseño.

Shyam K
fuente

Respuestas:

330

Escriba esto en onclickcaso del botón:

var result = confirm("Want to delete?");
if (result) {
    //Logic to delete the item
}
Ved
fuente
respuesta brillante! corto, preciso y funciona eficientemente
Juan
Para cualquier persona que no tenga experiencia en JavaScript, sus líneas de código no significan nada, el ejemplo parece poco concluyente y confuso. Sin embargo, es una buena respuesta.
Samuel Ramzan
Creo que deberías agregar algunos detalles a tu respuesta. ¿Por qué inserta el código dentro del botón en lugar de escribirlo en la sección principal o en un archivo externo? Esta es una función muy genérica y el programador puede querer usarla varias veces para varios botones, no la escribiría dentro de un solo botón específico ...
franz1
286

Se puede usar mejor de la siguiente manera

 <a href="url_to_delete" onclick="return confirm('Are you sure you want to delete this item?');">Delete</a>
Raghav Rach
fuente
2
Esto debería estar muy arriba en el hilo. Simple, rápido, efectivo. Hace el trabajo perfectamente.
DonExo
¡Muy peligroso! ¿Qué pasa si Javascript se ha desactivado? ¿O si un robot araña / de búsqueda leyera esta página? ¡Luego seguiría todos los enlaces y eliminaría todo! Algunos complementos del navegador también siguen todos los enlaces en una página para pre-cachearlo. ¡NUNCA lo hagas de esta manera! Las eliminaciones nunca deben ser una solicitud GET.
Daniele Testa
No es menos peligroso que la respuesta en el n. ° 1, cualquier JavaScript es peligroso si JavaScript está desactivado. La activación o desactivación de JavaScript es una elección personal del usuario, si JavaScript está desactivado, el usuario debe saber mejor no presionar ningún botón en ningún sitio web. Siempre hay verificación del lado del servidor como una alternativa maravillosa.
Samuel Ramzan
53

Así es como lo haría con un JavaScript discreto y el mensaje de confirmación retenido en el HTML.

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

Esto es puro vanilla JS, compatible 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');
      }
  });
}

Véalo en acción: http://codepen.io/anon/pen/NqdKZq

DevAntoine
fuente
Esto funciona perfectamente, pero solo funciona para el primer botón. ¿Qué pasa si tenemos como 20 o más de ellos? ¡Gracias!
emotalidad
1
Tienes razón, es porque querySelector coincide solo con el primer elemento. Edité la respuesta y bifurqué el codepen para usar querySelectorAll en su lugar.
DevAntoine
Sería genial si este ejemplo fuera editado para funcionar también con JavaScript deshabilitado, por ejemplo, href="https://stackoverflow.com/delete"sería suficiente, creo. O un ejemplo de envío de formulario.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
1
@CiroSantilli 巴拿馬 文件 六四 事件 法轮功 Ya es el caso gracias a la función event.preventDefault (). Puede reemplazar el hash char con una url, no se activará. Pero, si JavaScript está deshabilitado, el enlace funcionará como se esperaba.
DevAntoine
1
@CiroSantilli 巴拿馬 文件 六四 事件 法轮功 Aquí tienes;)
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()">
usuario1697128
fuente
Creo que es mejor tener solo 1 punto de retorno. así que prefiero
jedi
17
O simplemente return confirm("…"). No es necesario asignar una variable que sea booleana y luego ramificarse en if / else.
slhck
16

Prueba esto. Esto funciona para mi

 <a href="delete_methode_link" onclick="return confirm('Are you sure you want to Remove?');">Remove</a>
Shuhad Zaman
fuente
1
Hermosa y eficiente.
Samuel Ramzan
13

es muy simple y una línea de código

<a href="#" title="delete" class="delete" onclick="return confirm('Are you sure you want to delete this item')">Delete</a>
Mohammed Muzammil
fuente
Parece que ya hay una respuesta como esta justo debajo de la respuesta aceptada.
sombrero
12

mejorando en user1697128 (porque todavía no puedo comentarlo)

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

cancelará el envío del formulario si se presiona cancelar

Jaxx0rr
fuente
8

Me gustaría ofrecer la forma en que hago esto:

<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>
ceros y unos
fuente
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;
  }
}

nazmulhaqued
fuente
4

HTML:

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

Usando jQuery:

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

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

    if (choice) {
        window.location.href = $(this).attr('href');
    }
});
julionc
fuente
Una buena adaptación de jQuery de la respuesta DevAntoines ( stackoverflow.com/a/19973570/1337887 ). Sin embargo, un enfoque un poco más generalizado sería utilizar "$ ('A [confirmación de datos]')" en lugar de "$ ('. Eliminar')". De esa manera, no necesita los botones para tener una clase de eliminación, sino que simplemente integra el atributo de confirmación de datos.
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>
himos
fuente
3

Práctica

<form name=myform>
<input type=button value="Try it now" 
onClick="if(confirm('Format the hard disk?'))
alert('You are very brave!');
else alert('A wise decision!')">
</form>

Original web:

http://www.javascripter.net/faq/confirm.htm

KingRider
fuente
3

Si está interesado en alguna solución rápida y bonita con formato CSS, puede usar 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>

Buksy
fuente
2

configurar un mensaje de conformación cuando eliminas algo en php y mysql ...

usa este código de script:

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

usa este código html:

<a onclick="return Conform_Delete()" href="#">delete</a>
ashik
fuente
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!";
}

gauravbhai daxini
fuente
1

Usando jQuery:

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

Sé que esto es viejo, pero necesitaba una respuesta y ninguna de estas, pero la respuesta de Alpesh funcionó para mí y quería compartirla con personas que pudieran tener el mismo problema.

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

Versión normal:

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

Mi versión de PHP:

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

Puede que esta no sea la forma correcta de hacerlo públicamente, pero esto funcionó para mí en un sitio privado. :)

emotalidad
fuente
1

Es muy simple

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();
        }
    })
}
Amir Karim
fuente
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>
Alpesh
fuente
0
<SCRIPT LANGUAGE="javascript">
function Del()
{
var r=confirm("Are you sure?")
if(r==true){return href;}else{return false;}
}
</SCRIPT>

su enlace para ello:

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

El controlador onclick debe devolver falso después de la llamada a la función. Por ej.

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

Amit
fuente
0

Creo que la solución más sencilla y discreta sería:

Enlace:

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

Javascript:

$('.delete').click(function () {
    return confirm("Are you sure?");
});
Cookalino
fuente
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);

                }
            }
        });
}
xahoigiaitri
fuente
0

Aquí hay otro ejemplo simple en JS puro usando className y evento de enlace.

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>

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

llamar a esta función usando onClick

Pranav VR
fuente
0

Para el "mensaje de confirmación al eliminar" use:

                       $.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;
                        }
Arvind Upadhyay.
fuente
0

Angularjs con Javascript Eliminar Ejemplo

código 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" es cualquier variable angularjs, supongamos que desea pasar cualquier parámetro durante la acción de eliminación

Código AngularJS dentro del módulo de la aplicación

$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;
            }
        } 
Rijo
fuente
0

Es mucho más difícil hacerlo para cuadros de opciones seleccionadas. Aquí está la solución:

<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>
Tarik
fuente
0

Estoy usando de esta manera (en 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>
Shamsul Huda
fuente