2012-09-21 6 views
24

ho un link nel mio HTML:JavaScript o jQuery "Sei sicuro?" dialogo per il collegamento <A>?

<a href="/DoSomethingDangerous">do something dangerous</a> 

Visitando il link DoSomethingDangerous provoca un'azione non facilmente reversibile a verificarsi.

Quindi dopo aver fatto clic sul collegamento, desidero visualizzare una finestra di dialogo (ad esempio "Sei sicuro?" "OK" "Annulla") e se l'utente fa clic su Annulla il collegamento non viene visitato e il browser rimane alla stessa pagina.

Qual è la tecnica più pulita che utilizza Javascript o jQuery per implementare questo?

+4

È sicuro assumere che tutti quelli che utilizzano questo hanno javascript abilitato? Qualsiasi utente con esso disabilitato sarebbe in grado di visitare la pagina "pericolosa" senza avvisi – Manatherin

+3

Dovresti fare cose pericolose solo tramite richieste di posta. Nessuna quantità di JavaScript impedirà a qualcuno di visitare accidentalmente questo link se ha JavaScript disabilitato e non avrà alcun impatto su un motore di ricerca che spiderà il tuo sito. – meagar

+0

Si potrebbe voler riorganizzare le cose .. semplicemente * visitando * un collegamento non dovrebbe causare azioni irreversibili. Se quella pagina fa cose potenzialmente cattive, dovrebbe forse avere una conferma lì con un modulo che riporti a se stesso per fare la vera azione. Se si desidera avere una finestra di dialogo che viene eseguita nella pagina per confermare, è possibile che generi tale modulo e lo invii (o invii tramite ajax), e gli utenti non JS vedrebbero comunque la finestra di dialogo statica. – cHao

risposta

16

Penso che la soluzione più semplice sarà

<a href="/DoSomethingDangerous" onclick="if (!confirm('Are you sure?')) return false;">Link test</a>

+2

Ancora più semplice è solo fare "return confirm ('Sei sicuro?');" –

+0

Questo ha funzionato per me, dove l'altra opzione è sempre tornata vera. – Tigerhajen

53
<a class="confirm" href="/DoSomethingDangerous">do something dangerous</a> 

javascript:

$(function() { 
    $('.confirm').click(function(e) { 
     e.preventDefault(); 
     if (window.confirm("Are you sure?")) { 
      location.href = this.href; 
     } 
    }); 
}); 

o ancora più semplice:

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

Il nativo di dialogo Conferma ca non essere in stile. Se si desidera che lo stile, allora si potrebbe utilizzare jQuery.UI.dialog

+1

bella soluzione riutilizzabile! –

+0

Vorrei usare questo, ma il mio lampeggia appena e viene impostato direttamente su Sì o true. Questo accade sia in Firefox che in Edge. – Tigerhajen

26

Se sappiamo che la funzione DOM window.confirm() rendimenti booleano true su "sì" e false su "no", il nostro link potrebbe essere semplificata un po ':

<a href="/DoSomething" onclick="return confirm('Are you sure?');">Link</a> 
+0

Errore di sintassi: Inatteso) - Hai una parentesi quadra alla fine, dovrebbe essere: 'conferma conferma ('Sei sicuro?');' – Chud37

+0

Questa dovrebbe essere la risposta .. – hinteractive02

Problemi correlati