Pergunta

Eu estou usando PHP para passar um formulário de login quando necessário, e aqui está o 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;

O problema é, é que quando os hits do usuário digite no IE8, o formulário não apresentar, eo usuário é forçado a bater no botão enviar.

Como faço para corrigir isso?

Foi útil?

Solução

Se este é um problema real e você não consegue encontrar outra solução que você sempre pode fazer um evento onkeypress para o formulário e verifique se o Enter tecla foi pressionada.

EDIT: Aqui está o código correto de acordo com a resposta da 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: O seu HTML é válido. Tente 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
    }
}

Outras dicas

Também atente para esta fun fun bug:

Eu aprendi da maneira mais difícil que se o formulário é display:none no carregamento da página, mesmo se você mostrá-lo mais tarde com Javascript, IE8 ainda não vai apresentar sobre entrar. No entanto, se ele não está escondido no carregamento da página, e você configurá-lo para display:none depois, como onDOMReady, em seguida, ele funciona! WTF

Mais detalhes e resolver aqui: http: // www.thefutureoftheweb.com/blog/submit-a-form-in-ie-with-enter

simular um clique

Aqui está como eu faço isso em 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();

Aqui está um link no Microsoft sobre ele que pode lançar alguma luz para você.

Fazendo uma leitura rápida da ligação ele pode realmente ser considerado um bug enviar o formulário pela Tecla Enter, que eu presumo teria sido fixado pela Microsoft para o IE8.

IE anomalia quando se usa a tecla Enter para enviar um formulário

Editar:

Esta já foi removido, mas outra ligação cobrindo-o novamente (parte inferior da página) que definida-lo e explicar o bug no IE Blog em 18 dezembro de 2008 .

Você tem uma tag de abertura de formulário que acabou de ser omitido de seu trecho de código?

O atributo action no elemento form é exigido pela especificação HTML. Talvez ele vai trabalhar melhor.

Eu era capaz de reproduzir este, bem como com uma ação e método. Retirados todos os outros códigos na página e ele ainda é produzido. No entanto, tenho visto formas de trabalho no IE8 com action = ""

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top