У меня есть веб-интерфейс для приложения AS / 400 CGI, который позволяет использовать некоторые клавиши F1-F24 (в зависимости от страницы), а также переход на страницу вверх, вниз страницы и т. Д. - они передаютсяв основное приложение, которое обрабатывает их соответствующим образом.Например, на данной странице пользователь может либо нажать кнопку F3, либо нажать клавишу F3 - обе они будут устанавливать (скрытую) переменную CmdKey, чтобы иметь имя _K03 и значение F03.Работа с кнопками проста и не имеет проблем.Для работы с пользователями, нажимающими фактическую F-клавишу на клавиатуре, у меня уже давно есть IE-совместимый скрипт, который прекрасно работает:
function setCmdKeyIE() {
var cmdkeycode = "";
if (window.event.keyCode != 13 &
window.event.keyCode != 33 &
window.event.keyCode != 34 &
window.event.keyCode < 112 ) return;
window.event.keyCode = window.event.keyCode + 1000;
if (window.event.shiftKey) window.event.keyCode = window.event.keyCode + 1000;
switch(window.event.keyCode) {
case 1013: cmdkeycode = "EN"; break; /* Enter */
case 1033: cmdkeycode = "UP"; break; /* Page Up */
case 1034: cmdkeycode = "DN"; break; /* Page Down */
case 1112: cmdkeycode = "01"; break; /* F1 */
case 1113: cmdkeycode = "02"; break; /* F2 */
...(F3 thru F24 here)...
default: return; /* Anything else should be ignored */
}
window.event.cancelBubble = true;
window.event.returnValue = false;
document.forms[0].CmdKey.value = "F" + cmdkeycode;
document.forms[0].CmdKey.name = "_K" + cmdkeycode;
if (ONSUBMITFUN() == true) document.forms[0].submit();
}
Это не только правильно устанавливает элемент CmdKey, но иотменяет (останавливает) поведение браузера по умолчанию (если оно есть) от выполнения (например, когда пользователь нажимает клавишу F3, поле поиска не появляется).
Функция setCmdKeyIE () вызывается таким образом:
<body onKeyDown="setCmdKeyIE();" onHelp="return false;">
Теперь мне нужно, чтобы это работало для Firefox (и, возможно, других браузеров), и у меня возникают всевозможные проблемы.Первоначально я изменил функцию setCmdKeyIE (да, я знаю, что имя следует изменить, как только оно больше не относится к IE, но это меньше всего меня беспокоит!), Чтобы получить событие в качестве параметра (что было бы только в случае с FF,Я думал) или использовать текущее поведение, если оно не прошло (с IE).Я также добавил некоторую другую обработку, чтобы остановить распространение событий FF, но она не работает ...
Вот новый нерабочий код - может ли какая-то добрая душа указать на ошибку моих путей?
function setCmdKey(e) {
if (!e) {
var e = window.event; /* IE event-handling */
}
var wrkkeyCode = e.keyCode;
if (wrkkeyCode != 13 &
wrkkeyCode != 33 &
wrkkeyCode != 34 &
wrkkeyCode != 27 &
wrkkeyCode < 112 ) return;
wrkkeyCode = wrkkeyCode + 1000;
if (e.shiftKey) wrkkeyCode = wrkkeyCode + 1000;
var cmdkeycode = "";
switch(wrkkeyCode) {
case 1013: cmdkeycode = "EN"; break; /* Enter */
case 1033: cmdkeycode = "UP"; break; /* Page Up */
case 1034: cmdkeycode = "DN"; break; /* Page Down */
case 1112: cmdkeycode = "01"; break; /* F1 */
case 1113: cmdkeycode = "02"; break; /* F2 */
...(F3 thru F24 here)...
default: return; /* Anything else should be ignored */
}
if (e.stopPropagation) { /* FF */
e.stopPropagation();
e.preventDefault();
}
else { /* IE */
e.cancelBubble = true;
e.returnValue = false;
}
document.forms[0].CmdKey.value = "F" + cmdkeycode;
document.forms[0].CmdKey.name = "_K" + cmdkeycode;
if (ONSUBMITFUN() == true) document.forms[0].submit();
}
Нужно ли возвращать false из setCmdKeyIE с FF?Верно ли это, даже если эта процедура возвращает false?