2010-11-27 17 views
11

Quiero agregar un cuadro de diálogo de confirmación a un botón de eliminar para preguntarle al usuario si está bien o si no está eliminando el elemento seleccionado.Diálogo de confirmación de Javascript

Si no, no debería pasar nada, de lo contrario se debería ejecutar una url.

Sé cómo realizar esto a través de algunos códigos JavaScript, pero estoy buscando una solución que tenga menos código. Quiero decir, por ejemplo :

<a href="mysite.de/xy/delete" onClick="...">Delete</a> 

¿Es posible poner toda la funcionalidad en el elemento onClick sin tener algo de JavaScript adicional en la cabecera?

+0

no experto en javascript. Sin embargo, ¿no sería posible escribir una función a la que se llama onClick? – starcorn

Respuesta

18

Mejor (aunque lejos de ser ideal!): Darle la vuelta. No permita que el enlace haga nada, a menos que tenga JavaScript:

<a href="#" 
    onclick="if confirm('Sure?') { window.location='http://mysite.de/xy/delete';}"> 
    Click to delete 
</a> 

Esto al menos impide que el enlace funcione sin JavaScript. Esto también reduce el riesgo de que Google rastree accidentalmente el enlace, o incluso algún complemento local. (Imagen si tiene un complemento que intenta cargar/mostrar como miniatura) la página de destino al pasar el mouse sobre un enlace!)

Aún así, esta solución no es ideal. En realidad, navegará a la url, y la url podría aparecer en el historial debido a eso. ¡En realidad podría eliminar a Bob, crear un nuevo Bob y luego eliminarlo por accidente simplemente haciendo clic en "Atrás" en el navegador!

Una mejor opción sería usar JavaScript o un formulario para publicar la acción deseada. Puede hacer una solicitud al servidor con el método POST, o posiblemente mejor, con el método DELETE. Eso también debería evitar que las URL sean indexadas.

+0

De acuerdo, esto es un poco mejor. Existen riesgos potenciales asociados con la página que aparece en el historial del navegador, por ejemplo. – cspolton

+0

Estoy usando php para imprimir el enlace, ¿alguna idea de por qué esto no funciona ?: echo ' '; –

27

Puede return la confirm() (que devuelve true/false), así:

<a href="mysite.de/xy/delete" onClick="return confirm('You sure??');">Delete</a> 

You can test it here

+1

Técnicamente esto funcionará, pero todavía no puedo recomendarlo de esta manera, ya que no es una buena práctica. Las acciones realmente deberían ser publicadas en el servidor. – cspolton

+0

Creo que 'DELETE' en lugar de' GET' o 'POST' ... – wprl

5

considere lo que sucede si el usuario tiene JavaScript desactivado, o si Google viene y arañas las enlazar. ¿Su entidad será eliminada?

Una mejor manera sería publicar un formulario para eliminar.

+0

No creo que este enlace de eliminación sea público, por lo que no debería ser un problema. – jwueller

+0

Necesito la función para un servicio de back-end donde javascript tiene que estar habilitado –

+2

Esto asume que no hay otra seguridad en su lugar ... aunque sí estoy de acuerdo POST debería usarse para acciones. –

2

Hay un complemento jQuery que hace precisamente eso: jquery.confirm.

Ejemplo:

<a href="home" class="confirm">Go to home</a> 

código JS:

$('.confirm').confirm(); 

screenshot

Si el usuario confirma, que se redirige al enlace de la <a>, de lo contrario no pasa nada.

Cuestiones relacionadas