Запретить ссылку, подтвердить, а затем перейти к местоположению JQuery - PullRequest
17 голосов
/ 26 июля 2011

У меня есть такие ссылки.

<a href="delete.php?id=1" class="delete">Delete</a>

Если пользователь щелкнет по нему.Подтверждение должно появиться, и тогда, только если пользователь нажмет да, оно должно перейти к фактическому URL.

Я знаю, что это может предотвратить поведение по умолчанию

    function show_confirm()
    {
    var r=confirm("Are you sure you want to delete?");
    if (r==true)   {  **//what to do here?!!** }

    }    


    $('.delete').click(function(event) {
    event.preventDefault();
    show_confirm()
    });

Но как мне продолжить это?ссылку или отправить сообщение ajax на эту ссылку после подтверждения?

Ответы [ 9 ]

32 голосов
/ 26 июля 2011

Вы можете сделать все это в один клик:

$('.delete').click(function(event) {
    event.preventDefault();
    var r=confirm("Are you sure you want to delete?");
    if (r==true)   {  
       window.location = $(this).attr('href');
    }

});

Или вы можете сделать это, передав элемент, по которому щелкнули, функции:

function show_confirm(obj){
    var r=confirm("Are you sure you want to delete?");
    if (r==true)  
       window.location = obj.attr('href');
}    
$('.delete').click(function(event) {
    event.preventDefault();
    show_confirm($(this));

});
3 голосов
/ 11 декабря 2014

Мне потребовалось некоторое время, чтобы понять это, поэтому я решил опубликовать свое решение.

$('.delete').click(function(e){
    if(confirm('Are you sure?')){
        // The user pressed OK
        // Do nothing, the link will continue to be opened normally
    } else {
        // The user pressed Cancel, so prevent the link from opening
        e.preventDefault();
    }
}

Я думал о том, чтобы подтвердить неверный путь.Подтверждение будет препятствовать автоматическому открытию сайта и ждать ввода пользователя.Таким образом, в основном вам нужно перенести ваш protectDefault в другое.

Таким образом, вы не сможете открыть ссылку, только если они нажмут кнопку Отмена.Это также позволяет ссылке функционировать как обычно, например, если она имеет инструкцию target = "_ blank".

2 голосов
/ 26 июля 2011
function show_confirm(elem)
{
    var r=confirm("Are you sure you want to delete?");
    if (r==true) { 
        window.location.href = elem.href;
    }
}    

$('.delete').click(function(event) {
    event.preventDefault();
    show_confirm(this)
});
2 голосов
/ 26 июля 2011
function show_confirm(url){
    var r=confirm("Are you sure you want to delete?");
    if (r==true){
        location.top.href = url;
    }
}    


$('.delete').click(function(event) {
    event.preventDefault();
    show_confirm($(this).attr('href'));
});

Если вы хотите использовать ajax, вы можете заменить location.top.href = url; на $.get(url);

1 голос
/ 07 ноября 2012

Чтобы оптимизировать код в функции show_confirm, попробуйте использовать ниже:

function show_confirm(obj){
   if(confirm("Are you sure you want to delete?")) window.location = obj.attr('href');
}
1 голос
/ 03 апреля 2012

Это краткая форма:

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

Я использую ее на веб-сайтах для подтверждения загрузки / ссылки.

0 голосов
/ 20 сентября 2016

Если вы хотите использовать оповещение / подтверждение, это лучший способ (я предпочитаю использовать Подтверждение начальной загрузки или bootbox ):

$('.confirm-delete').click( function( event ) {
    if ( !confirm('Are you sure?') ) event.preventDefault();
});
0 голосов
/ 26 июля 2011
 $('.delete').click(function() {

   if (confirm('Are you sure?')) {
     $.post($(this).attr('href'), function() {
       // Delete is OK, update the table or whatever has to be done after a succesfull delete
      ....
     }
   }

   return false;

}
0 голосов
/ 26 июля 2011

вы могли бы сделать

function show_confirm()
    {
    if(confirm("Are you sure you want to delete?")){
        //make ajax call
     }else{

          //no ajax call
     }

    }    
...