[jQuery] [AS400 simulator] 單純抓取Ctrl鍵
眾所周知,AS400的畫面(終端畫面)很像PC上DOS的畫面
但是需要快速輸入大量資料的操作人員基本上絕對偏愛這種畫面,
因為雙手都不太需要離開鍵盤就可以把很多資料登打完。
由於系統不斷進步,現在幾乎都是WEB介面的設計,
但這些設計對於某些公司的操作人員都還是相當難用的(速度不夠快)。
因此我們就必須在WEB上實現可以快速輸入的 AS400 Simulator
這時候第一個遇到最大的問題是『右邊Ctrl鍵』,因為對 AS400終端來說,
這個『右邊Ctrl鍵』是『執行』,也就是Web表單上的 submit,
然而瀏覽器卻不支援『左/右』分別的 Ctrl鍵/Shift鍵/Alt鍵
雖然,透過jquery的 keyup 和 keydown 功能可以抓到 Ctrl 鍵,但卻有很奇妙的差別:
keydown :
可以單獨抓到 Ctrl 鍵的 flag 和 keycode。
但又有可能發生在組合鍵(例如 Ctrl+A 、Ctrl+C等)發生前的按壓。
keyup:
當發生組合鍵(例如 Ctrl+A 、Ctrl+C等)時,Ctrl 鍵 的keyup事件就不會單獨出現。
因此,針對單獨按壓Ctrl鍵就必須透過這兩個事件交互去判斷使用者行為。
所以下面就是用jQuery來實現判斷
// JavaScript Document
var downctrl=false;
// 偵測ctrl
$(document).keydown(function(e) {
if(popdisplay){
// press any key close help pop window
$("#popWindow").hide();
popdisplay=false;
}
if(e.ctrlKey && e.keyCode==17){
// catch Ctrl key and set flag
downctrl=true;
}else if(e.keyCode==117){
// F6 Key pop help window
if(!popdisplay){
e.preventDefault();
$("#popWindow").show();
popdisplay=true;
}
}else{
// clear Ctrl catch flag
downctrl=false;
}
});
$(document).keyup(function(e) {
if(e.ctrlKey){
// this prevent combo key to trigger
downctrl=false;
}else if(downctrl){
// pure Ctrl key catch
$('#alertmsg').html('本頁被執行');
}else{
// clear Ctrl catch flag
downctrl=false;
$('#alertmsg').html(' ');
}
});
留言