2008-12-02 10 views
33

Estoy haciendo un simple enlace de eliminación con un evento onClick que muestra un 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 lo que estoy haciendo mal aquí ... Cualquier comentario sería muy apreciado.Problema simple de JavaScript: onClick confirmar no prevenir la acción predeterminada

EDITAR: En realidad, tal como está ahora el código, la página ni siquiera realiza la llamada a la función ... por lo que no aparece ningún diálogo. Yo tenía el código onClick como:

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

cual hizo que aparezca un cuadro de diálogo, pero aún 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> 

Respuesta

96

Hay un error tipográfico en el código (la etiqueta un se cierra demasiado pronto). También se puede usar:

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

nota del retorno (confirmar): el valor devuelto por guiones en iguala intrínsecas decide si la acción navegador por defecto se ejecuta o no; en caso de tener que realizar un gran trozo de código que puede llamar, por supuesto, 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> 

(cuenta que eliminar es una palabra clave)

Para completar: los navegadores modernos también soportan eventos DOM, lo que le 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 DOM Events.

+0

Gracias, no noté el error tipográfico. – kafuchau

+1

'onClick =" return confirm ('¿Estás absolutamente seguro de que quieres eliminar?') "' –

10

utilizo este, funciona como un encanto. No es necesario tener ninguna función, justo en línea con su enlace (s)

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

Tampoco hay necesidad de usar "javascript:". Pero como dijo siukurnin, deberías usar POST si cambias algo. – some

4

En primer lugar, eliminar es un reserved word en javascript, me sorprende que esto incluso se ejecuta para ti (Cuando la prueba en Firefox, obtengo un error de sintaxis)

En segundo lugar, su HTML se ve raro. ¿Hay alguna razón por la que cierre las etiquetas de anclaje de apertura con /> en lugar de solo >?

+0

Guau, pedo cerebro. No pensé en marcar 'eliminar' como palabra clave. Tipo de "duh" cuando tantos otros idiomas lo tienen reservado. : P – kafuchau

+0

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! – some

7

Usar un enlace simple para una acción, como eliminar un registro, me parece peligroso: ¿qué ocurre si un rastreador intenta indexar sus páginas? Ignorará cualquier javascript y seguirá cada enlace, probablemente no sea algo bueno.

Será mejor que utilice un formulario con method = "POST".

Y entonces tendrá un evento "OnSubmit" para hacer exactamente lo que quiere ...

+4

Este es un punto excelente. No solo es potencialmente peligroso para su aplicación, en realidad es una violación de las especificaciones HTTP. –

+1

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

+0

No, los rastreadores no podrían acceder a las partes protegidas de su sitio. – Benry

19

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

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

me gustaría que esto podría ser heplful para usted ..

¡Buena suerte!

6

que tenían el problema de semejanza (haga clic en el botón, pero después de cancelar clic todavía quita mi objeto), por lo que hizo esta de tal 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; 
}); 
0

intente esto:

OnClientClick = 'return (confirm ("¿Está seguro de que desea eliminar este comentario?"));'

4
<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> 
1

Si desea utilizar pequeños comandos en línea en la etiqueta onclick podría ir con 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>

Cuestiones relacionadas