Domanda

Sto usando PHP per passare un form di login, se necessario, e qui è il codice:

$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;

Il problema è, è che quando l'utente preme entrare in IE8, la forma non inviare, e l'utente è costretto a colpire il pulsante di invio.

Come faccio a porre rimedio a questa?

È stato utile?

Soluzione

Se questo è un problema reale e non è possibile trovare un'altra soluzione si può sempre fare un evento onkeypress per il modulo e verificare se il Inserisci tasto è stato premuto.

EDIT: Ecco il codice corretto in base alla risposta della macchina:

$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: Il codice HTML è valido. Prova questo :

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
    }
}

Altri suggerimenti

Anche guardare fuori per questo fun fun bug:

Ho imparato nel modo più duro che se il modulo è display:none al caricamento della pagina, anche se si mostra in un secondo momento con JavaScript, IE8 ancora non presenterà sul entrare. Tuttavia, se non è nascosto al caricamento della pagina, e si mise a display:none dopo, come onDOMReady, allora funziona! WTF

Più informazioni e soluzione qui: http: // www.thefutureoftheweb.com/blog/submit-a-form-in-ie-with-enter

Simula un clic

Ecco come lo faccio in 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();

Questo è il link in Microsoft su di esso che potrebbero far luce per voi.

Facendo una rapida lettura del legame che potrebbe in realtà essere considerato un errore l'invio del modulo da parte del tasto Invio, che presumo sarebbe di stato fissato da Microsoft per IE8.

IE anomalia quando si utilizza il tasto Invio per inviare un modulo

Modifica:

Questo è stato ora rimosso ma un altro collegamento ricoprendolo di nuovo (in fondo alla pagina), che definito e spiegare il bug in IE Blog su 18 dicembre 2008 .

Avete un tag di apertura che è stato appena omesso dal frammento di codice?

L'attributo action sull'elemento form è richiesto dalle specifiche HTML. Forse funzionerà meglio.

Sono stato in grado di riprodurre anche questo con un'azione e il metodo. Stripped tutte altro codice sulla pagina e ancora viene prodotta. forme Tuttavia, ho visto il lavoro in IE8 con action = ""

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top