2009-08-13 5 views
-2

Я работаю на странице входа, написанной как JSP. Это довольно просто, но ведет себя по-разному в IE8 и Firefox (большой сюрприз там). Я еще не тестировал это другие браузеры.IE8/Firefox Поведенческая разница

Возможно, я мог взломать исправление с помощью некоторого Javascript, но я искал дополнительную информацию о поведении, прежде чем я просто воспользуюсь обходным решением, надеясь на более чистое исправление и избежать этой проблемы в будущем.

Серверный генерируется HTML сниппет в вопросе заключается в следующем:

<form name="member_session_info" method="post" autocomplete="off" action="/membersession" onsubmit="return validate_form()" > 
     <input type="hidden" id="memberSessionAction" name="memberSessionAction" value="" /> 
     <input type="hidden" name="homePage" value="/2009/aas/aas_home.jsp" /> 
     <input type="hidden" name="memberLandingPage" value="/2009/aas/aas_member_landing.jsp" /> 
     <input type="hidden" name="memberProfilePage" value="/2009/aas/aas_member_profile.jsp" /> 
     <input type="hidden" name="passwordRecoveryPage" value="/2009/aas/aas_password_recovery.jsp" /> 

     <input id="uname" class="text xsmall right" name="username" value="USERNAME" onclick="checkClickUser()" onKeyPress="checkKeyPress(event, 'login', sendProfile)" style="width: 220px;" type="text"> 

     <input id="pass" class="text xsmall right" name="password" value="PASSWORD" onclick="checkClickPassword()" onKeyPress="checkKeyPress(event, 'login', sendProfile)" style="width: 220px;" type="password"> 

     <a href="javascript:sendProfile('startPasswordRecovery');" class="xsmall">FORGOT PASSWORD</a> 
</form> 

и Javascript, что поддерживает это является:

<script type="text/javascript" language="JavaScript"> 

function validatePost(code, doAlert) 
{ 
    postValid = true; 
    return postValid; 
} 

function sendProfile(action) 
{ 
    document.getElementById("memberSessionAction").value = action; 
    document.member_session_info.submit(); 
    return false; 
} 

function initializePage() 
{ 
} 

function validate_form() 
{ 
    return false; 
} 

function checkClickUser() 
{ 
    var username; 

    username = document.getElementById("uname").value; 

    if (username == "USERNAME") { 
     // Clear the field since it's the first time 
     document.getElementById("uname").value = ""; 
    } 

    return true; 
} 

function checkClickPassword() 
{ 
    var username; 

    username = document.getElementById("pass").value; 

    if (username == "PASSWORD") { 
     // Clear the field since it's the first time 
     document.getElementById("pass").value = ""; 
    } 

    return true; 
} 

function checkKeyPress(event, object, func) 
{ 
    var keycode; 
    if (window.event) keycode = window.event.keyCode; 
    else if (event) keycode = (event.which) ? event.which : event.keyCode; 
    else return true; 

    if ((keycode == 13)) // check for return 
    { 
     func(object); 
     return true; 
    } 
    return true;  
} 

</script> 

Основной симптом заключается в следующем: Если вы используете вкладку для перехода из поля имени пользователя в поле пароля в форме пароль правильно подсвечивается и очищается в FF, но не в IE8. В IE8 вкладка в поле пароля перемещает курсор в начало поля пароля, оставляя значение по умолчанию (PASSWORD) на месте и не очищая его.

Любая идея о том, почему это происходит? Является ли это известной ошибкой или врожденным недостатком IE8, который мне просто нужно будет взломать, или я могу просто добавить немного кода кода для правильной обработки IE8?

Если проблема не ясна из моего описания, я могу попытаться выяснить или просто выбросить скриншот/видеоклип или загрузить статическую копию HTML где-нибудь. (Если последний, я мог бы использовать рекомендацию хорошего сайта или услуги, чтобы сделать это, поскольку фактический сайт все еще находится в dev и не доступен в Интернете.) Спасибо!

Редактировать: Изменение свойства onclick на onfocus устраняло эту проблему, но привнесло другое в свет (см. Мой комментарий @David). Может ли это быть связано с тем, как написана checkKeyPress? Это функция, которую я заимствовал из других мест на сайте. В частности, мне интересно, может ли изменение его операторов возврата быть исправлением. Может быть, он не должен возвращать true/false/anything вообще?

Редактировать 2: Я полностью удалил метод checkKeyPress, чтобы убедиться, что это вызвало проблему, и ничего не изменило.

Полный источник: here. Дивер, который фокус случайным образом перескакивает, является тем, который находится между двумя комментариями «глобального nav», расположенными на самой вершине тела. Понятия не имею, почему это происходит. Чтобы убедиться, что фокус был как-то просто сброшен, я добавил еще один div выше того, который фокусируется на случайном переходе, ожидая, что фокус начнет прыгать на новый div вместо этого. Это не так. Он по-прежнему переключает фокус на div с изображением в нем. Я совершенно безнадежно.

ответ

1

Поскольку потерянный фокус, кажется, происходит каждые 6000 миллисекунд, я бы указал на вину где-то на expandone()/contractall() в /js/qm_scripts.js.

Ваша форма входа находится в div «dropmsg0», в результате чего она будет скрыта и перерисована каждые 6 секунд. Текстовые поля теряют фокус в IE8 при скрытии. Я бы либо переименовал div, чтобы исключить, если из тикера, либо изменить скрипт тикера, чтобы он не запускался, когда есть только один divmsg div.

+0

+1 Клянусь, ты прибил его. Даже не спрашивайте меня, почему qm_scripts.js включает в себя скрипт тикера ProHTML. Вы не хотите знать. –

2

Что делать, если вы положили чек в onfocus вместо onclick? Тэббинг в поле технически не является кликом.

+0

Хороший вопрос - я не писал оригинальную страницу, я только обновляю ее. Я сделаю это. –

+0

Хорошо, так что исправлена ​​одна проблема, но появилась еще одна возможность: теперь, при вводе в любом поле (в IE8), этот ввод будет случайно потерять фокус, поэтому мне действительно нужно щелкнуть обратно, чтобы продолжать печатать. –

+0

@Matt: Я взял ваш код, изменил 'onclick' на' onfocus' для двух полей ввода, и я не вижу здесь проблемы с потерянным фокусом. –

Смежные вопросы