發表文章

目前顯示的是有「javascript」標籤的文章

[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; } }...

Operating the HTML table like Powerbuilder's DataWindow chapter 0

圖片
發想來自我接觸最久的程式語言 Powerbuilder,說真的跳通到其他語言時,會非常懷念它的DataWindow 物件。原因不外乎,它讓資料操作變得很簡單,甚至讓程式設計師變懶了。 但如果開始使用其他語言時,例如現在幾乎都要用網頁來工作,就發現網頁要操作資料真的不是那麼容易,尤其使用AJAX技術時,針對頁面的操作,每個工程師寫出來的方式大相逕庭,閱讀理解就變得重重。 有鑑於此,只好將自己理解datawidnow的部份,將其方法(method)實現到javascript裡面來。 盡力讓畫面表單操作變得簡單一些。 這樣的好處是,使用相同套件,程式碼閱讀起來清爽也易懂,比較容易除錯。 下面簡單介紹一下操作原理,與表格架構,DataWindow會用DW簡稱: 1、原則上一個類DW的架構如下: <div id="objid">  <table width="100">   <tr>    <th width="48" cn="field1">欄1標題</th>    <th width="18" cn="field2">欄2標題</th>    <th width="28" cn="field3">欄3標題</th>   </tr>  <table> </div> 這是一個標準table外面包著一個div層,而這個div層的id就是這個datawindow的名稱(datawindow name),一個DW結構(div)裡面只能有一個table存在。 這個結構很重要,因為接下來所有的操作都會參考這個結構的定義。 2、TH屬性的定義: cn :欄位名稱,必要的,英數字,其值就是代表了這個欄位的column name。 edit :編輯模式,選擇性,此屬性表示生成的資料可以編輯,其值(編輯模式)有:text / password / date / ddw / lbox。 key :關鍵欄,選擇性,其值為yes / no,yes=開啟編...

jQuery ajax.responseText注意事項

jQuery操作ajax技巧是相當方便的, 但是操作ajax.responseText,不得不注意到同步問題,如下面的例子: var rtxt = $.ajax ({ type: "GET" ,                    url: "empl.cfm" ,                    data: { eno:"A001",                    dept: "A" } ,                    async: true}) .responseText; var msg = eval (rtext).message; alert (msag); 這個是以 jQuery 利用ajax非同步呼叫 empl.cfm 頁面取得人事資料,而該頁面會以 JSON 格式回傳,該格式結構裡面會包含 message 的變數。 這個看似正常的程式碼其實隱含著很大的問題, 測試過程中,當伺服器回應在200ms以內時這個畫面會顯示 msag 內容, 當大於 200ms 就容易出現無反應 ( alert沒有執行 )。 後來反覆檢查的結果,發現原來是 async 參數會作祟,當 async為 true 時,ajax 為非同步運作:請求頁面同時,script 繼續執行並不等待請求回應,由於 responseText 指令在執行時會需要瀏覽器即時編譯,當編譯完成執行時,若請求的頁面已經返回回應資料,則此時會正常的繼續執行,若請求頁面來不及在編譯執行前返回回應資料,則會造成 rtxt 變成 undefined 狀態,使得接下來的 eval(rtext) 也變成 undefined ,如此直接取得結構 .message 時就會導致 javas...

Javascript的Array中文排序

續上一篇 , 資料讀取到 Array 以後,偶爾使用者會需要排序這些列表資料, 當然 javascript array 有 sort 這個方法來排序,只是這個排序, 只比較合適於內容值為數值的排序,對於文字的排序就不怎麼靈光,不好用了。 因此 javascript 提供的另外一種排序方式 就比較合適文字/中文的排序方式: //SORT data function sortDW1(field,kind){     dwset.sort(function(a,b){         if (kind=="A"){             return a[field].localeCompare(b[field])         }else{             return b[field].localeCompare(a[field])         };     }); }; 關於 localeCompare 可以參考系列網頁資料: http://www.w3school.com.cn/js/jsref_localeCompare.asp http://www.southmaster.com/article/pub.php?page=red2.php&id=5408