Problema simple de JavaScript: onClick confirmar que no impide la acción predeterminada

Estoy creando un enlace de eliminación simple con un evento onClick que abre un cuadro de diálogo de confirmación. Quiero confirmar que el usuario quiere eliminar una entrada. Sin embargo, parece que cuando se hace clic en Cancelar en el cuadro de diálogo, la acción predeterminada (es decir, el enlace href) todavía se está llevando a cabo, por lo que la entrada aún se elimina. No estoy seguro de qué estoy haciendo mal aquí ... Cualquier aportación sería muy apreciada.

EDITAR: En realidad, tal como está el código ahora, la página ni siquiera hace la llamada a la función ... entonces, no aparece ningún diálogo. Tenía el código onClick como:

onClick="confirm('Delete entry?')"

que abrió un cuadro de diálogo, pero todavía iba al enlace en Cancelar.

<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt_rt"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>

<script type="text/javascript">

function delete() {
    return confirm('Delete entry?')
}

</script>


...

<tr>
 <c:if test="${userIDRO}">
    <td>
        <a href="showSkill.htm?row=<c:out value="${skill.employeeSkillId}"/>" />
        <img src="images/edit.GIF" ALT="Edit this skill." border="1"/></a>
    </td>
    <td>
        <a href="showSkill.htm?row=<c:out value="${skill.employeeSkillId}&remove=1"/>" onClick="return delete()"/>
        <img src="images/remove.GIF" ALT="Remove this skill." border="1"/></a>
    </td>
 </c:if>
</tr>

preguntado el 02 de diciembre de 08 a las 19:12

10 Respuestas

Hay un error tipográfico en su código (la etiqueta a está cerrado demasiado pronto). Puede utilizar:

<a href="whatever" onclick="return confirm('are you sure?')"><img ...></a>

nota la volver (confirmar): el valor devuelto por los scripts en pares intrínsecos decide si la acción predeterminada del navegador se ejecuta o no; en caso de que necesite ejecutar un gran fragmento de código, por supuesto, puede llamar a otra función:

<script type="text/javascript">
function confirm_delete() {
  return confirm('are you sure?');
}
</script>
...
<a href="whatever" onclick="return confirm_delete()"><img ...></a>

(tenga en cuenta que eliminar es una palabra clave)

Para completar: los navegadores modernos también admiten eventos DOM, lo que le permite registrar más de un controlador para el mismo evento en cada objeto, acceder a los detalles del evento, detener la propagación y mucho más; ver Eventos DOM.

Respondido el 18 de enero de 16 a las 14:01

onClick="return confirm('Are you absolutely sure you want to delete?')" - muhammad fahad

Bueno, solía tener el mismo problema y el problema se resolvió agregando la palabra "retorno"antes de confirmar:

onclick="return confirm('Delete entry?')"

Ojalá esto pudiera ser útil para ti ...

¡Buena suerte!

Respondido el 21 de enero de 16 a las 17:01

¿Estás seguro de que esto funciona? Me pidió confirmación, pero incluso si se realiza la acción Cancelar enlace seleccionado ... - Gediminas

Yo uso esto, funciona a las mil maravillas. No es necesario tener ninguna función, solo en línea con su (s) enlace (s)

onclick="javascript:return confirm('Are you sure you want to delete this comment?')"

Respondido el 02 de diciembre de 08 a las 21:12

Tampoco es necesario utilizar "javascript:". Pero como dijo siukurnin, debe usar POST si cambia algo. - algo

Tuve un problema similar (haga clic en el botón, pero después de hacer clic en cancelar, aún elimina mi objeto), así que hice esto de esa manera, espero que ayude a alguien en el futuro:

 $('.deleteObject').click(function () {
    var url = this.href;
    var confirmText = "Are you sure you want to delete this object?";
    if(confirm(confirmText)) {
        $.ajax({
            type:"POST",
            url:url,
            success:function () {
            // Here goes something...
            },
        });
    }
    return false;
});

Respondido 08 Feb 13, 13:02

El uso de un enlace simple para una acción como eliminar un registro me parece peligroso: ¿qué pasa si un rastreador está tratando de indexar sus páginas? Ignorará cualquier javascript y seguirá todos los enlaces, probablemente no sea algo bueno.

Será mejor que utilice un formulario con método = "POST".

Y luego tendrás un evento "OnSubmit" para hacer exactamente lo que quieras ...

Respondido el 02 de diciembre de 08 a las 21:12

Este es un punto excelente. No solo es potencialmente peligroso para su aplicación, en realidad es una violación de la especificación HTTP. - Peter Bailey

JW. ¿Puede un rastreador acceder a los registros sin poder iniciar sesión? - kafuchau

No, los rastreadores no podrán acceder a las partes protegidas de su sitio. - Benry

Si la "protección" depende de javascript, el rastreador (y cualquiera que haya desactivado javascript) puede acceder a ella. - algo

@PeterBailey ¿Qué parte de la especificación HTTP se ocupa de esto? ¿Puedes agregar un enlace o algo? Estoy interesado en leer más sobre esto. - A.R.

En primer lugar, borrar es un palabra reservada en javascript, me sorprende que esto incluso se ejecute para usted (cuando lo pruebo en Firefox, aparece un error de sintaxis)

En segundo lugar, su HTML se ve extraño: ¿hay alguna razón por la que está cerrando las etiquetas de anclaje de apertura con /> en lugar de solo > ?

Respondido el 02 de diciembre de 08 a las 21:12

Vaya, pedo cerebral. No pensé en marcar "eliminar" como palabra clave. Una especie de "duh" cuando tantos otros idiomas lo tienen reservado. :PAG - kafuchau

XHTML usa /> para cerrar etiquetas vacías ... ¡Eso significa que en el código de la publicación original, las etiquetas a se cierran dos veces! - algo

<img src="images/delete.png" onclick="return confirm_delete('Are you sure?')"> 



<script type="text/javascript">
function confirm_delete(question) {

  if(confirm(question)){

     alert("Action to delete");

  }else{
    return false;  
  }

}
</script>

Respondido 17 Oct 14, 22:10

Si desea utilizar pequeños comandos en línea en la etiqueta onclick, puede optar por algo como esto.

<button id="" class="delete" onclick="javascript:if(confirm('Are you sure you want to delete this entry?')){jQuery(this).parent().remove(); return false;}" type="button"> Delete </button>

Respondido 31 Oct 14, 13:10

prueba esto:

OnClientClick='return (confirm("Are you sure you want to delete this comment?"));'

respondido 18 nov., 19:12

He tenido problemas con IE7 y he devuelto falso antes.

Verifique mi respuesta aquí a otro problema: Javascript no se ejecuta en IE

contestado el 23 de mayo de 17 a las 11:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.