Pregunta

Estoy usando PHP para pasar un formulario de acceso cuando sea necesario, y aquí está el código:

$htmlForm = '<form id="frmlogin">'.'<label>';
switch(LOGIN_METHOD)
{
    case 'both':
        $htmlForm .= $ACL_LANG['USERNAME'].'/'.$ACL_LANG['EMAIL'];
        break;
    case 'email':
        $htmlForm .= $ACL_LANG['EMAIL'];
        break;
    default:
        $htmlForm .= $ACL_LANG['USERNAME'];
        break;
}                       

$htmlForm .= ':</label>'.
             '<input type="text" name="u" id="u" class="textfield" />'.
             '<label>'.$ACL_LANG['PASSWORD'].'</label>'.
             '<input type="password" name="p" id="p" class="textfield" />'.
             '<center><input type="submit" name="btn" id="btn" class="buttonfield" value="Sign in to extranet" /></center>'.
             '</form>';

return $htmlForm;

El problema es, es que cuando los accesos de los usuarios entran en IE8, la forma no presentara, y el usuario se ve obligado a golpear el botón de enviar.

¿Cómo rectificar esto?

¿Fue útil?

Solución

Si esto es un problema real y no puede encontrar otra solución que puede hacer siempre un acontecimiento onkeypress para la forma y comprobar si el Enter se ha pulsado.

EDIT: Aquí está el código correcto de acuerdo a la respuesta de la máquina:

$htmlForm .= ':<form><label>'.$ACL_LANG['USERNAME'].'</label>'.
                                     '<input type="text" name="u" id="u" class="textfield" />'.
                                     '<label>'.$ACL_LANG['PASSWORD'].'</label>'.
                                     '<input type="password" name="p" id="p" class="textfield" />'.
                                     '<center><input type="submit" name="btn" id="btn" class="buttonfield" value="Sign in to extranet" /></center>'.
                                     '</form>';

EDIT 2: Su HTML es válido. Prueba a este :

function checkEnter(e) { //e is event object passed from function invocation
    var characterCode //literal character code will be stored in this variable

    if (e && e.which) { //if which property of event object is supported (NN4)
        e = e
        characterCode = e.which //character code is contained in NN4's which property
    }
    else {
        e = event
        characterCode = e.keyCode //character code is contained in IE's keyCode property
    }

    if (characterCode == 13) { //if generated character code is equal to ascii 13 (if enter key)
        document.forms[0].submit() //submit the form
        return false
    }
    else {
        return true
    }
}

Otros consejos

También esté atento a este divertido insecto divertido:

He aprendido de la manera difícil que si su forma es display:none en la carga de la página, incluso si se lo enseñas más tarde con Javascript, IE8 todavía no se somete a entrar. Sin embargo, si no está oculta en carga de la página, y se configura a display:none después, como onDOMReady, entonces funciona! WTF

Información adicional y solución aquí: http: // www.thefutureoftheweb.com/blog/submit-a-form-in-ie-with-enter

Simular un click

Así es como lo hago en jQuery.

// Recreating normal browser behavior in Javascript. Thank you, Microsoft.
jQuery.fn.handle_enter_keypress = function() {
  if ($.browser.msie){
    $(this).find('input').keypress(function(e){
      // If the key pressed was enter
      if (e.which == '13') {
        $(this).closest('form')
        .find('button[type=submit],input[type=submit]')
        .filter(':first').click();
      }
    });
  }
}

$('form').handle_enter_keypress();

Aquí hay un enlace en Microsoft en él que podría arrojar alguna luz para usted.

Tomar una lectura rápida del enlace que en realidad podría ser considerado un error de enviar el formulario de la tecla Intro, que supongo que hubiera sido fijado por Microsoft para IE8.

IE anomalía cuando se utiliza la tecla enter para enviar un formulario

Editar:

Esto ahora se ha eliminado pero otro enlace cubriéndola de nuevo (parte inferior de la página) que definido y explicar el error en el IE Blog el 18 de diciembre 2008 .

¿Tiene una etiqueta de forma que se acaba de apertura omitido de su fragmento de código?

El atributo action en el elemento form es requerido por la especificación HTML. Tal vez que va a trabajar mejor.

Yo era capaz de reproducir este, así como con una acción y método. Despojado de todo otro tipo de código en la página y que todavía se produce. formas sin embargo, he visto el trabajo en IE8 con action = ""

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top