2011-07-25 4 views
7

Tengo un LinkButton donde utilizo la propiedad OnClientClick a preguntar al usuario si él realmente quiere llevar a cabo una acción, por ejemplo:¿Por qué no volver falsa de OnClientClick cancelar la devolución de datos

<script> 
function confirmDelete() { 
    return confirm('Do you really want to delete?'); 
} 
</script> 

<asp:LinkButton runat="server" OnClientClick="return confirmDelete()" ... /> 

Este patrón suele funcionar , pero en esta página específica, no es así. No importa si hago clic en Aceptar o en Cancelar en el cuadro de diálogo de confirmación, la devolución de datos se ejecuta.


simplemente para la corrección (para responder a la pregunta de PST): el HTML representado está bien. P.ej. se parece a esto:

<a id="ctl00_c1_content_btnDelete" onclick="return confirmDelete();" 
href="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(..))" 
... > 
    Delete 
</a> 
+0

El HTML resultante generada es ...? –

+0

@pst: el HTML está bien. Vea mi respuesta a continuación: Acabo de publicar esto para otros que podrían tener el mismo problema. – M4N

+0

Acéptalo ya ;-) –

Respuesta

7

La razón de la conducta fue otra pieza de javascript, donde se registró un controlador para el enlace (botón) 's de eventos de clic a través de jQuery, por ejemplo, algo similar a esto:

<script> 
$(document).ready(function() { 
    $('a').click(function() { 
    // ... 
    return (someCondition == true); 
    }); 
}); 
</script> 

Parece que este-controlador de clic se llamó después de la registrada por OnClientClick, y cuando éste regresó true, a continuación, se produjo la devolución de datos, independientemente del resultado del primer clic-controlador (el diálogo de confirmación).

0

Aquí hay algo que funcionó para mí.

<asp:LinkButton runat="server" OnClientClick="return (!confirmDelete()){return false;}" /> 

Javascript

function confirmDelete(){ 
    if(something == true){ 
    return true; 
    } 
    else{ 
    return false; 
    } 
    } 
Cuestiones relacionadas