如何在VS.NET/C# Builder開發的網頁中也能實現DOS下錄入資料斷行符號換行的功能

來源:互聯網
上載者:User
資料|網頁 如何在VS.NET/C# Builder開發的網頁中也能實現DOS下錄入資料斷行符號換行的功能
北京煤炭科學研究總院經濟與資訊研究所 丁報聖

在DOS年代,錄入資料時我們習慣了在錄入完一行資料後敲一個斷行符號轉入下一行的資料錄入。昔日DOS的輝煌已經成為過去,如今更加友好易用的GUI圖形操作介面Windows已經進入了我們的日常生活。
1996年Windows95的出現是軟體史上的一次偉大革命。Windows 是美國微軟公司開發的一種圖形方式的作業系統,它的出現克服了 DOS 中難記的一些命令,使電腦與人更親近,只要輕輕點擊滑鼠,電腦就會完成一個動作。同時windows也改變了原先DOS下錄入資料敲斷行符號的方式,現在我們若是在錄入資料時希望游標跳到下一行或下一個輸入框則只能按鍵盤上的TAB鍵或用滑鼠點擊下一個輸入框。這個改變對於沒有接觸過DOS作業系統的電腦使用者也許沒有什麼大的影響,但是對於從DOS下轉過來的的電腦使用者卻是一個雞肋;特別是我們的資料錄入人員,在DOS年代已經習慣在錄入一行資料時敲一下斷行符號繼續下一行資料的錄入。能不能眷顧一下這些老使用者的習慣也是我們開發人員應該考慮的事情。
筆者在前不久的一個項目中就遇到了這樣的問題:使用者要求我們的前台錄入頁面提供支援斷行符號換行的功能。做過開發的人都知道在傳統windows應用程式中實現斷行符號換行其實並不太難,我們可以通過截獲鍵盤的斷行符號按索引值,然後通過發送訊息使錄入介面中的下一控制項(如:文字框輸入框等)獲得輸入焦點來達到這個目的。在WEB頁面中我們也可以通過指令碼(JAVASCRIPT或VBSCRIPT)語言設定WEB控制項的焦點來實現。
在傳統的ASP或JSP/PHP中編寫的WEB應用程式中實現斷行符號換行的功能時,我們通常的做法就是在控制項的OnkeyPress事件、OnClick事件或頁面中的OnSubmit等事件中寫上一段JAVASCRIPT或VBSCRIPT代碼捕捉到鍵盤迴車的索引值,然後人為指定跳轉順序實現斷行符號換行,這種做法缺點只能適用於頁面控制項元素很少項目不大的場合,一旦頁面控制項元素或該類檔案很多時,這種人工方式必然要消耗很大的工作量。能不能有一個行之有效辦法使我們一勞永逸?這就是本文筆者要討論的內容。諸位看官莫急,容我慢慢道來:
我們的項目是用VB.NET開發的,前台錄入介面是VB.NET程式編譯後產生的HTML頁面,在瀏覽器中運行。VB.NET開發的程式最大的好處是程式碼可以和介面相隔離,也就是相互獨立;但是用VB.NET開發的程式編譯後產生的HTML錄入介面中的控制項元素名稱是很難確定的,雖然也會具有一定的命名規則。在編譯前我們是無法得知編譯產生頁面上的可錄入控制項元素名稱的。
這樣一來我們就碰到了一個問題,難道說我們要實現DOS下的斷行符號換行功能就只有開啟一個個的ASPX檔案查看其中的元素名稱,然後按ASP或JSP/PHP中的做法寫相應的JAVASCRIPT或VBSCRIPT代碼了嗎?這顯然是一個讓人暈倒的事實;我們的這個項目有上百個ASPX檔案,要開啟上百個檔案一一按ASP或JSP/PHP中的做法寫下JAVASCRIPT或VBSCRIPT斷行符號實現代碼簡直就是奇聞。筆者通過查MSDN和反覆實踐找到瞭解決方法。
下面我將用JavaScript指令碼語言為例來解決這個問題,在寫代碼前我得向大家介紹一些相關知識;瀏覽器中瀏覽的分頁檔在JavaScript中稱之為一個文檔對象(DOM)。在 JavaScript 能夠涉及的範圍內有如下幾個“大”對象:Window, Document, Location, Navigator, Screen, History 等。Window對象是Document、Location和History對象的父物件。
圍繞我們要解決的問題,這裡我們重點提一下Document、Form、Elements三個對象及Onkeypress事件,Document 文檔對象:是指描述當前視窗或指定視窗對象的文檔。它包含了文檔從<head>到</body>的內容。用法:document (當前視窗)或 <視窗對象>.document (指定視窗) ; Form 對象:document.forms[] 是一個數組,包含了文檔中所有的表單Form ;Elements對象:為表單元素對象,<表單對象>.elements 是一個數組,包含了該表單所有的對象;Onkeypress事件是一個鍵盤事件,是在使用者按下鍵盤上的鍵時引發的事件。通過這三大對象再配合Onkeypress事件就可以完成現我們的要求;
下面是最終的實現代碼清單:
var JumpTypeArray =new Array("text","password","textarea","checkbox","radio",
"select","select-one","select-multiple","file")//引用頁面上可獲得焦點元素類型
var DebarTypeArray =new Array("submit","reset","button","checkbox","radio",
"select","select-one","select-multiple","hidden")//引用頁面上需排除元素類型
function inStrArray(src,dec)
{//檢查給定串是否在指定字串數組中,如在返回索引號,否返回-1;
for (var i=0 ; i<dec.length; i++)
{
if (src==dec[i])
{
return i;//定位成功,返回索引號
break;
}
}
return -1; //定位失敗,返回-1
}
function checkCR(evt)
{//斷行符號響應函數
var evt = (evt) ? evt : ((event) ? event : null);
var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
var frm=document.forms[0]; //指定FORM名稱為頁面中的第一個
if ((evt.keyCode == 13) && (inStrArray(node.type,JumpTypeArray)!=-1))
{//判斷當前對象是否為可輸入對象,物件類型數組:JumpTypeArray
for (var i = 0 ; i < frm.elements.length; i++)
{//for begin
if (frm.elements[i].name==node.name)
{//定位當前對象
if ((i+1)< frm.elements.length)
{//對象數組索引越位判斷
if (inStrArray(frm.elements[i+1].type,JumpTypeArray)!=-1)
{ //判斷當前對象下一個對象是否為可輸入組件,物件類型數組:JumpTypeArray
frm.elements[i+1].focus();//設定焦點
if (inStrArray(frm.elements[i+1].type,DebarTypeArray)==-1)
{ //過濾不可選中文字物件,物件類型數組:DebarTypeArray
frm.elements[i+1].select();//選中組件常值內容
}
}
return false;//禁止提交表單內容
break;
}
else
{//提交表單內容
return true;
break;
}
}
}//end for
}
}
document.onkeypress = checkCR;

引用說明:將上面的代碼存成檔案,如:WebEnter.js,然後在要實現斷行符號換行的頁面中寫上:
<script language="JavaScript" src="path+WebEnter.js"></script> 即可。
Path:是WebEnter.js檔案所在路徑。

適用環境:Windows9x/NT/2000/XP+ASP/JSP/PHP/ASP.NET+IE4.x(及以上版本)

注意事項:
1、引用頁面中不能有多個表單(Form)。
2、引用頁面中不允許有重名對象(object)。

調用例子:http://dbs.myrice.com/dbs/Demo.html

最後需要說明的是:當引用頁面在NS系列瀏覽器中瀏覽時,以上代碼需修改,因為在NS中的瀏覽器對象和IE中的對象是有一點區別的,這個就留給讀者練手了。


相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。