Bater “enter” faz formulário não posto no IE8
-
12-09-2019 - |
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?
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 = ""