2011-07-25 16 views
17

Mam takie linki.Zapobiegaj łączu, potwierdź i przejdź do lokalizacji jquery

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

Jeśli użytkownik go kliknie. Potwierdzenie powinno zostać wyskakujące, a następnie tylko wtedy, gdy użytkownik kliknie "tak", powinien otrzymać aktualny adres URL.

wiem, że może to uniemożliwić domyślne zachowanie

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() 
    }); 

ale jak mam kontynuować ten link lub wysłać wiadomość ajax do tego łącza po potwierdzeniu?

Odpowiedz

29

można zrobić to wszystko w kliknij:

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

}); 

Albo można to zrobić poprzez przepuszczenie elementu klikniętego do funkcji:

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

}); 
+4

Ok, więc .. jest jedna pułapka do tego podejścia, a to byłoby że to nie wygląda, jeśli użytkownik zamierzał otworzyć łącze w nowej karcie, może tam być nawet target = "_specyficznywindow" lub target = "_ blank" na nim .. :) –

+0

jeśli otworzysz nowy tab lub środkowe kliknięcie myszki na link, przekażesz potwierdzenie, używając '

2
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')); 
}); 

Jeśli chcesz użyć ajaxa, możesz zastąpić e location.top.href = url; z $.get(url);

2
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) 
}); 
0
$('.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; 

} 
1

to krótka forma:

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

go używać na stronach internetowych w celu potwierdzenia pobrania/link.

1

Aby zoptymalizować kod w funkcji show_confirm, spróbuj użyć poniżej:

function show_confirm(obj){ 
    if(confirm("Are you sure you want to delete?")) window.location = obj.attr('href'); 
} 
3

Zajęło mi trochę czasu, aby dowiedzieć się tego, więc pomyślałem, że po mojej rozwiązanie.

$('.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(); 
    } 
} 

Myślałem o potwierdzeniu w niewłaściwy sposób. Potwierdź spowoduje automatyczne otwarcie strony i oczekiwanie na dane użytkownika. Zasadniczo musisz przenieść swój preventDefault do innego.

Uniemożliwia to otwarcie połączenia tylko wtedy, gdy kliknie Anuluj. Pozwala to również na działanie łącza tak, jak zwykle, na przykład, jeśli ma polecenie target = "_ blank".

+0

Ten zadziałał dla mnie. Jeśli poszedłem z zaakceptowanym rozwiązaniem '$ (this) .attr ('href')' zwróciło 'undefined' – dbr

0

Jeśli chcesz użyć alertu/potwierdzić, jest to najlepszy sposób (wolę używać Bootstrap Confirmation lub bootbox):

$('.confirm-delete').click(function(event) { 
    if (!confirm('Are you sure?')) event.preventDefault(); 
}); 
Powiązane problemy