2008-11-06 18 views
10

Tengo un formulario con un cuadro de texto y un botón. IE es el único navegador que no enviará el formulario cuando se presione Intro (funciona en FF, Opera, Safari, Chrome, etc.). Encontré esta función de JavaScript para tratar de convencer a IE de comportarse; pero en vano:El botón Entrar no envía formulario (SOLO IE) ASP.NET

function checkEnter(e){ 
    var characterCode 
    if (e && e.which) { 
     e = e 
     characterCode = e.which 
    } else { 
     e = event 
     characterCode = e.keyCode 
    } 
    if (characterCode == 13) { 
     document.forms[0].submit() 
     return false 
    } else { 
     return true 
    } 
} 

Implementación:

searchbox.Attributes("OnKeyUp") = "checkEnter(event)" 

Algún consejo?

EDIT:This page en CodeProject describe lo Dillie estaba diciendo, y funciona perfectamente.

+1

Entonces, ¿su formulario no tiene botones? – James

+0

Lo sentimos, tiene un botón también. Gracias por señalar eso. – Anders

Respuesta

13

La otra cosa que he hecho en el pasado es ajustar el área de formulario en un Panel y establecer el atributo DefaultButton en el botón de enviar que tiene. Esto asigna de forma efectiva la tecla Intro al envío siempre que tenga un elemento de formulario en foco en el área del panel.

+0

agregará un problema de panel con mi formato? – Anders

+0

No, no lo hará (respondió mi propia pregunta). Esto funcionó ¡Gracias!: D – Anders

+2

Me alegro de que haya funcionado. La buena advertencia con esto también es que si tienes varios formularios en la página (digamos varias opciones para buscar), puedes envolver un panel alrededor de cada uno de ellos y luego enviarlos correctamente. El botón está "mapeado" correctamente. –

2
// Use the following Javascript in your HTML view 
// put it somewhere between <head> and </head> 

    <script language="JavaScript" type="text/javascript"><!-- 
    function KeyDownHandler(btn) 
    { 
     if (event.keyCode == 13) 
     { 
     event.returnValue=false; 
     event.cancel = true; 
     btn.click(); 
     } 
    } 
    // --> 
    </script> 

    // Put this in your TextBox(es) aka inside <asp:textbox ... > 
    onkeydown="KeyDownHandler(ButtonID)" 
+0

Gracias por la entrada, arroja un hermoso error 'Objeto no admite esta propiedad o método', sin embargo :( – Anders

-1

¿Utiliza un GET en lugar de un POST? ¿La URL es demasiado larga? He visto eso ...

-1

Básicamente, un formulario necesita un botón, tipo de entrada = "enviar" o un tipo de entrada = "imagen" para permitir que el comportamiento incorporado envíe un formulario al ingresar. No deberías necesitar un javascript para enviarlo.

25

Solo crea una entrada de texto en un div oculto en la página. Esto sorteará el error de IE.

Ejemplo div:

<!-- Fix for IE bug (One text input and submit, disables submit on pressing "Enter") --> 
    <div style="display:none"> 
      <input type="text" name="hiddenText"/> 
    </div> 
1

Al utilizar display:none, IE no verá el botón y por lo tanto no será capaz de utilizarlo para enviar el formulario. En su lugar, puede usar z-index y posicionamiento absoluto para ocultarlo debajo de otro elemento, p. con el estilo:

position:absolute; bottom: -20px; left: -20px; z-index: -1;

Ahora todavía estaré allí, utilizable por el IE, pero oculto bajo otro elemento.

0

Esto es debido a una peculiaridad en IE para entradas de campo de texto individuales.

Una solución simple es detener la página que tiene un solo campo de texto agregando otro oculto.

<input type="text" name="hidden" style="visibility:hidden;display:none;" /> 

ver .. http://www.4guysfromrolla.com/articles/060805-1.aspx

1

ocultar el botón - no usar display: none, pero con las siguientes estilos:

position: absolute; /* no longer takes up layout space */ 
visibility: hidden; /* no longer clickable/visible */ 

Si hace esto, usted no tendrá que agregue otros elementos o entradas ocultas.

Cuestiones relacionadas