[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(' ');
	}
});


留言

這個網誌中的熱門文章

【研究】列印的條碼為什麼很難刷(掃描)

統一發票列印小程式

C# 使用 Process.Start 執行外部程式