8

必要に応じてPHPを使用してログインフォームを渡します。コードは次のとおりです。

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

問題は、ユーザーがIE8でEnterキーを押すと、フォームが送信されず、ユーザーが送信ボタンを押すことを余儀なくされることです。

これを修正するにはどうすればよいですか?

4

7 に答える 7

13

また、この楽しい楽しいバグに気をつけてください:

display:noneフォームがページの読み込み時にある場合、後でJavascriptを使用してフォームを表示しても、IE8はEnterキーを押しても送信されないという難しい方法を学びました。ただし、ページの読み込み時に非表示になっておらず、display:noneonDOMReadyのようにafterに設定すると、機能します。WTF

詳細と回避策はこちら:http ://www.thefutureoftheweb.com/blog/submit-a-form-in-ie-with-enter

于 2009-09-22T16:30:25.320 に答える
7

クリックをシミュレートする

これが私が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();
于 2011-01-07T18:41:41.490 に答える
4

これがMicrosoftのリンクで、あなたに光を当てる可能性があります。

リンクをざっと読んでみると、実際にはEnterキーでフォームを送信するバグと見なされる可能性があります。これは、MicrosoftがIE8用に修正したものと思われます。

Enterキーを使用してフォームを送信するときのIEの異常

編集:

これは現在削除されていますが、それを定義し、2008年12月18日のIEブログのバグを説明する別のリンク(ページの下部)が再びそれをカバーしています。

于 2009-06-08T13:25:53.287 に答える
3

コードスニペットから省略されたオープニングフォームタグはありますか?

于 2009-06-08T13:03:17.920 に答える
2

これが実際の問題であり、別の解決策が見つからない場合は、いつでもonkeypressフォームのイベントを実行して、Enterキーが押されたかどうかを確認できます。

編集:マシンの答えによると、正しいコードは次のとおりです。

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

編集2:あなたのHTMLは有効です。これを試してください:

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
    }
}
于 2009-06-08T12:57:17.167 に答える
1

要素のaction属性はform、HTML仕様で必要です。多分それはうまくいくでしょう。

于 2009-06-08T13:25:05.333 に答える
1

これもアクションと方法で再現できました。ページ上の他のすべてのコードを削除しても、引き続き生成されます。ただし、フォームがIE8でaction=""を使用して機能するのを見てきました。

于 2009-09-18T14:01:34.870 に答える