Как показать подтверждающее сообщение перед удалением?


204

Я хочу получить подтверждающее сообщение, нажав кнопку «Удалить» (это может быть кнопка или изображение). Если пользователь выбираетOk », то удаление выполняется, иначе, если Cancelнажать «», ничего не происходит.

Я попытался повторить это, когда кнопка была нажата, но повторяющиеся вещи заставляют мои поля ввода и текстовые поля терять свои стили и дизайн.

Ответы:


330

Запишите это в onclickслучае кнопки:

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

блестящий ответ! Короче говоря, точный и работает эффективно
Джон

Для любого неопытного пользователя JavaScript ваши строки кода ничего не значат, пример выглядит неубедительным и запутанным. Тем не менее, это хороший ответ.
Самуэль Рамзан

Я думаю, что вы должны добавить некоторые детали к своему ответу. Почему вы вставляете код внутри кнопки вместо того, чтобы записывать его в раздел заголовка или во внешний файл? Это очень общая функция, и программист может захотеть использовать ее несколько раз для нескольких кнопок, я бы не стал писать ее внутри одной конкретной кнопки ...
franz1

286

Вы можете лучше использовать следующим образом

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

2
Это должно быть в порядке. Просто, быстро, эффективно. Делает работу просто отлично.
DonExo

Очень опасно! Что если Javascript был отключен? Или если бы паук / поисковый бот прочитал бы эту страницу? Затем следуйте по всем ссылкам и удалите все! Некоторые плагины для браузера также следуют по всем ссылкам на странице, чтобы предварительно ее кэшировать. НИКОГДА не делай так! Удаление никогда не должно быть запросом GET.
Даниэле Теста

Это не менее опасно, чем первый ответ, любой JavaScript опасен, если JavaScript отключен. Включение или отключение JavaScript - это личный выбор пользователя. Если JavaScript отключен, пользователь должен лучше знать, чтобы не нажимать какие-либо кнопки на любом веб-сайте. Всегда есть проверка на стороне сервера как прекрасная альтернатива.
Самуэль Рамзан

53

Вот как вы можете сделать это с помощью ненавязчивого JavaScript и сообщения подтверждения, удерживаемого в HTML.

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

Это чистый ванильный JS, совместимый с 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');
      }
  });
}

Посмотрите это в действии: http://codepen.io/anon/pen/NqdKZq


Это работает отлично, но работает только для первой кнопки. Что если у нас их будет 20 или больше? Спасибо!
Эмоциональность

1
Вы правы, это потому, что querySelector соответствует только первому элементу. Я отредактировал ответ и раздвоил кодовую ручку, чтобы вместо этого использовать querySelectorAll.
DevAntoine

Было бы здорово, если бы этот пример был отредактирован, чтобы также работать с отключенным JavaScript, например, href="https://stackoverflow.com/delete"было бы достаточно, я думаю. Или пример отправки формы.
Сиро Сантилли 郝海东 冠状 病 六四 事件 法轮功

1
@CiroSantilli 巴拿馬 文件 六四 事件 法轮功 Это уже так благодаря функции event.preventDefault (). Вы можете заменить хеш-символ URL-адресом, он не будет запущен. Но, если JavaScript отключен, ссылка будет работать как положено.
DevAntoine

1
@CiroSantilli 巴拿馬 文件 六四 事件 法轮功 Вот, пожалуйста;)
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()">

Я думаю, что лучше иметь только 1 точку возврата. так что я предпочитаю
джедай

17
Или просто return confirm("…"). Нет необходимости присваивать переменную, которая является логической, а затем переходить в if / else.
Slhck


13

это очень просто и одна строка кода

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

Похоже, что уже есть ответ ниже этого принятого ответа.
шляпа

12

улучшение user1697128 (потому что я пока не могу это комментировать)

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

отменит отправку формы, если отменить нажатие


8

Я хотел бы предложить способ, которым я делаю это:

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

Используя jQuery:

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

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

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

Хорошая jQuery-адаптация ответа DevAntoines ( stackoverflow.com/a/19973570/1337887 ). Тем не менее, несколько более обобщенным подходом было бы использовать «$ ('A [data-verify]')» вместо «$ ('. Delete')». Таким образом, вам не нужно, чтобы кнопки имели класс удаления, а просто интегрируйте атрибут подтверждения данных.
Флориан


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

Если вы заинтересованы в каком-нибудь быстром симпатичном решении с готовым форматом css, вы можете использовать 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

установить сообщение о подтверждении при удалении чего-либо в php & mysql ...

используйте этот код скрипта:

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

используйте этот HTML-код:

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


1

Используя jQuery:

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

1

Я знаю, что это старый, но мне нужен был ответ, и ни один из них, но ответ alpesh работал для меня и хотел поделиться с людьми, которые могли иметь такую ​​же проблему.

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

Нормальная версия:

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

Моя версия PHP:

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

Это не может быть правильным способом сделать это публично, но это сработало для меня на частном сайте. :)


1

Это очень просто

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>

Ваша ссылка для этого:

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

0

Обработчик onclick должен возвращать false после вызова функции. Например,

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


0

Я думаю, что самое простое ненавязчивое решение было бы:

Ссылка на сайт:

<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

Вот еще один простой пример в чистом JS с использованием className и привязкой к нему события.

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>

вызвать эту функцию, используя onClick


0

Для «подтверждающего сообщения об удалении» используйте:

                       $.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 с Javascript Удалить пример

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" - любая переменная angularjs, если вы хотите передать какой-либо параметр во время действия удаления

Код Angularjs внутри модуля приложения

$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

Гораздо сложнее сделать это для блоков выбора. Вот решение:

<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

Я использую этот способ (в 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>
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.