2011-07-25 6 views
17

Tengo enlaces como este.Prevenir un enlace, confirmar y luego ir a la ubicación jquery

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

Si un usuario hace clic en él. Debe aparecer una confirmación y solo si el usuario hace clic en sí, debe ir a la url real.

sé que esto puede impedir el comportamiento predeterminado

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

pero ¿cómo puedo seguir ese enlace o enviar un mensaje a ese enlace Ajax después de confirmar?

Respuesta

29

que podría hacerlo todo dentro del clic:

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

}); 

O puede hacerlo pasando el elemento se ha hecho clic a la función:

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

bien, así que .. hay una trampa a este enfoque, y que sería que esto no mira si el usuario intentó abrir el enlace en una nueva pestaña, incluso podría haber un target = "_ somespecificwindow" o target = "_ blank" allí ... :) –

+0

si _abierta en una nueva pestaña_ o Haga clic con el botón central en el enlace, pasará la confirmación, usando '

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

Si desea utilizar ajax puede reemplazar e location.top.href = url; con $.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

Esta es una forma corta:

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

lo uso en los sitios web de descarga de confirmación/enlace.

1

Para optimizar el código en función show_confirm, tratan de utilizar a continuación:

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

Me tomó un tiempo para resolver esto, por lo que pensé que había puesto mi solución.

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

Estaba pensando en confirmar de la manera incorrecta. Confirmar evitará que el sitio se abra automáticamente y esperará la entrada del usuario. Entonces, básicamente, debe mover su preventDefault al else.

Por lo tanto, solo evitará que se abra el enlace si hacen clic en Cancelar. Esto también permite que el enlace funcione como lo haría normalmente, por ejemplo, si tiene una instrucción target = "_ blank".

+0

Este me funcionó. Si fui con la solución aceptada '$ (this) .attr ('href')' returned 'undefined' – dbr

0

Si te gusta usar alerta/confirmación, esta es la mejor manera (yo prefiero usar Bootstrap Confirmation o bootbox):

$('.confirm-delete').click(function(event) { 
    if (!confirm('Are you sure?')) event.preventDefault(); 
}); 
Cuestiones relacionadas