문제

나 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 에서 양식을 제출하지 않을,그리고 사용자는 충돌하 제출 버튼입니다.

나는 어떻게 해결할 이?

도움이 되었습니까?

해결책

이것이 실제 문제이고 다른 솔루션을 찾을 수 없다면 언제든지 할 수 있습니다. onkeypress 양식에 대한 이벤트 및인지 확인하십시오 입력하다 키가 눌려졌습니다.

편집 : 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>';

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

다른 팁

또한 이미 bug:

나는 하드 방법을 배웠는 경우에 당신의 양식 display:none 에서 페이지 로드,도를 표시하는 경우 그것은 나중에 자바스크립트와 IE8 되지 않을 제출에 입력합니다.그러나,아니면에 숨겨진 페이지 로드,그리고 당신은 그것을 놓 display:none 한 후,다음과 같 onDOMReady,그것은 작품!WTF

자세한 내용 및 해결 방법이 여기: http://www.thefutureoftheweb.com/blog/submit-a-form-in-ie-with-enter

클릭을 시뮬레이션하십시오

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();

다음은 Microsoft의 링크가 있습니다.

링크를 빠르게 읽으면 실제로 Enter 키에 의해 양식을 제출하는 버그로 간주 될 수 있습니다.

즉, Enter 키를 사용하여 양식을 제출할 때 이상

편집하다:

이것은 이제 제거되었지만 다른 것입니다 링크 다시 덮고 있습니다 (페이지 하단) 2008 년 12 월 18 일에 IE 블로그의 버그를 정의하고 설명했습니다..

코드 스 니펫에서 생략 된 오프닝 양식 태그가 있습니까?

그만큼 action 속성 form HTML 사양에 요소가 필요합니다. 어쩌면 더 잘 작동 할 수도 있습니다.

나는 행동과 방법으로 이것을 재현 할 수 있었다. 페이지에서 다른 모든 코드를 제거하면 여전히 생성됩니다. 그러나 나는 action = ""가있는 IE8에서 형태가 작동하는 것을 보았다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top