AS/400 CGI アプリケーションへの Web フロントエンドがあり、いくつかの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 固有ではなくなったら名前を変更する必要があることはわかっていますが、それは私の心配ではありません!) イベントをパラメーターとして取得します (これは Firefox の場合のみです)。私は考えました)または(IEで)渡されない場合は現在の動作を使用します。他にもFirefoxのイベント伝播を止める処理を追加したのですが、うまくいきません...
これが新しい動作しないコードです - 親切な魂が私のやり方の誤りを指摘できますか?
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();
}
Firefox で setCmdKeyIE から false を返す必要がありますか? この手順が false を返す場合でも、これは成り立ちますか?