"타격을 입력하지 않는다"게시물 양식에서 IE8
-
12-09-2019 - |
문제
나 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 키에 의해 양식을 제출하는 버그로 간주 될 수 있습니다.
편집하다:
이것은 이제 제거되었지만 다른 것입니다 링크 다시 덮고 있습니다 (페이지 하단) 2008 년 12 월 18 일에 IE 블로그의 버그를 정의하고 설명했습니다..
코드 스 니펫에서 생략 된 오프닝 양식 태그가 있습니까?
그만큼 action
속성 form
HTML 사양에 요소가 필요합니다. 어쩌면 더 잘 작동 할 수도 있습니다.
나는 행동과 방법으로 이것을 재현 할 수 있었다. 페이지에서 다른 모든 코드를 제거하면 여전히 생성됩니다. 그러나 나는 action = ""가있는 IE8에서 형태가 작동하는 것을 보았다.