Question

J'utilise PHP pour passer un formulaire de connexion en cas de besoin, et est le code ici:

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

Le problème est que lorsque l'utilisateur clique entrent dans IE8, la forme ne présente pas, et l'utilisateur est obligé de cliquer sur le bouton soumettre.

Comment puis-je rectifie cela?

Était-ce utile?

La solution

Si cela est un vrai problème et vous ne pouvez pas trouver une autre solution, vous pouvez toujours faire un événement onkeypress pour le formulaire et vérifier si le Entrée touche a été pressée.

EDIT: Voici le code correct en fonction de la réponse de la machine:

$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: Votre code HTML est valide. Essayez cette :

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

Autres conseils

Regardez aussi pour ce bug fun fun:

Je l'ai appris à la dure que si votre formulaire est display:none à la charge de la page, même si vous le montrer plus tard avec Javascript, IE8 sera toujours pas soumettre à entrer. Cependant, si elle n'est pas caché au chargement de la page, et que vous définissez à display:none après, comme onDOMReady, alors ça marche! WTF

Plus de détails et solution de contournement ici: http: // www.thefutureoftheweb.com/blog/submit-a-form-in-ie-with-enter

Simuler un clic

Voici comment je le fais dans 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();

Voici un lien dans Microsoft sur ce qui pourrait jeter un peu de lumière pour vous.

Prendre une lecture rapide du lien, il peut effectivement être considéré comme un bug soumettant le formulaire par la touche Entrée, que je présume AURAIT été fixé par Microsoft pour IE8.

IE anomalie lors de l'utilisation de la touche Entrée pour soumettre un formulaire

Edit:

a été supprimée, mais une autre lien le recouvrant à nouveau (en bas de la page) qui défini et expliquant le bug dans IE Blog le 18 Décembre 2008 .

Avez-vous une balise de formulaire d'ouverture qui vient d'être omis dans l'extrait de code?

L'attribut action sur l'élément form est requis par la spécification HTML. Peut-être que ça va marcher mieux.

J'ai pu reproduire ce aussi bien avec une action et méthode. Stripped toutes les autres code sur la page et il se produit encore. Cependant, je l'ai vu travailler des formes dans IE8 avec action = « »

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top