2010-11-17 19 views
20

Tengo una página aspx que pospone cuando no debería. hay dos cuadros de texto, dos listboxes y dos botones en la página. si en cualquier punto se presiona la tecla enter, el primer botón se enfoca y se "presiona", lo que da como resultado una pérdida de selección dentro de las cajas de lista.página ASP.Net tecla enter que causa la publicación

¿Cómo deshabilito esto? hay muchísimos tutoriales sobre cómo capturar el botón enter y ejecutar un método, pero podría encontrar uno sobre cómo simplemente desactivar la característica clara "déjame agarrar el primer botón que encuentro y haz clic en él" mencionado anteriormente.

+1

Véase también http://stackoverflow.com/questions/1934223/disabling-default-button-or-enter -key-in-asp-et-c-sharp – Rory

Respuesta

29
  • Se podría establecer el DefaultButton en el formulario o un grupo especial. De esta manera tienes control total de lo que sucede.
  • Set UseSubmitBehavior = "False" en sus botones. Esto desactiva el "AutoPostback" en Enter.

Preferiría el segundo si quisiera evitar la devolución de datos en Enter por completo.

+0

Si es un botón de imagen ... ¿cuál es la solución? – SRJ

+1

@SRJ: podría usar una 'Imagen' en su lugar. O eche un vistazo a esta pregunta que aborda ese problema: http://stackoverflow.com/questions/1561400/how-to-disable-submit-behaviour-of-aspimagebutton –

+0

Usando el "" y el atributo del botón "UseSubmitBehavior" a falso fue mi solución para un problema similar. Aquí está este fragmento de la fuente: https://pastebin.com/9hXJBrmk –

1

Este es el comportamiento predeterminado de una aplicación web, puede tomar uno de los tutoriales que encontró y ocultar ese comportamiento, simplemente abandonando el envío.

19

¿Estás utilizando jQuery?

si es así:

$(document).keypress(function(e) 
{ 
    if(e.keyCode === 13) 
    { 
     e.preventDefault(); 
     return false; 
    } 
}); 
+4

¿No impediría que la tecla enter inserte una línea en blanco en textarea? –

+0

También detendría el comportamiento de envío al presionar ingresar cuando el foco está en ese cuadro de texto donde la entrada debe invocar el envío ('i nombre de usuario/caja de texto de contraseña') – sohaiby

+0

Gran solución. @sohaiby @Tony_Henrich Es fácil reemplazar 'document' a un selector que se dirige exactamente a aquellas entradas donde la clave Enter debe ser suprimida. También es fácil, sin sentido, eludir jQuery utilizando JS simple. – Roland

6

Utilice el siguiente código para deshabilitar la tecla Intro que causa la devolución de datos. Este fragmento de código bloqueará la tecla enter en todos los navegadores 4.0 anteriores, excepto cuando se presiona enter en un Textarea o en el botón Enviar.

<script language="JavaScript"> 
var nav = window.Event ? true : false; 
if (nav) { 
window.captureEvents(Event.KEYDOWN); 
window.onkeydown = NetscapeEventHandler_KeyDown; 
} else { 
document.onkeydown = MicrosoftEventHandler_KeyDown; 
} 

function NetscapeEventHandler_KeyDown(e) { 
if (e.which == 13 && e.target.type != 'textarea' && e.target.type != 'submit') { 
return false; 
} 
return true; 
} 

function MicrosoftEventHandler_KeyDown() { 
if (event.keyCode == 13 && event.srcElement.type != 'textarea' && 
event.srcElement.type!= 'submit') 
return false; 
return true; 
} 
</script> 
1
<body onkeydown = "return (event.keyCode!=13)"> 
3

Sólo poner esto en ASP.Net que el control Cuadro de texto:

<asp:TextBox ID="TextBox1" runat="server" 
    onkeydown = "return (event.keyCode!=13);" > 
</asp:TextBox> 
Cuestiones relacionadas