function KeyDownProcess() {
//-----------------------------------------------------------
//網頁親和性輸入控制元件
//元件功能:可以讓網頁資料的輸入更親切,功能如下:
//1.按下Enter鍵自動找到下一個可輸入輸入元件
//2.按下Enter鍵自動找尋submit按鍵,如果找到則模擬Click的功能
//3.當輸入元件設定唯讀時,按下backspace鍵時,防止網頁轉址
//4.支援無障礙導覽設定
//版本:1.3(2010.09.12)
//作者:科碩資訊有限公司
//引用本元件,請保留作者和版本資訊
//連絡mail:cursor@cursorinfo.com.tw
//------------------------------------------------------------
var kv = 0;
var rv = false;
var isTextarea = false;
var currentId = null; //目前元件
if (document.all && typeof (document.all) == "object") {
kv = event.keyCode;
isTextarea = (event.srcElement.tagName == "TEXTAREA");
currentId = event.srcElement.id;
}
else {
kv = evt.keyCode;
isTextarea = (evt.target == "TEXTAREA");
currentId = evt.id;
}
switch (kv) {
case 8:
if (currentId.length == 0)
return false;
return !document.getElementById(currentId).readOnly;
case 13:
if (event.srcElement.tagName == "A" || (event.srcElement.tagName == "INPUT" && event.srcElement.type == "BUTTON"))
return true;
if (currentId.length == 0)
return false;
if (isTextarea == true) {
rv = isTextarea;
}
else {
var cts = document.all && typeof (document.all) == "object" ? document.all : document.getElementsByTagName('input');
var cid = "";
var queryBu = null;
var beginNext = false; //開始比對是否為輸入元件
var nextInput = null; //下一個輸入元件
var specialSubmitId = "textQueryBU"; //指定特例的submit id
var exceptionSubmitId = "waitting"; //指定例外的submit Id
for (ii = 0; ii < cts.length; ii++) {
if (cts[ii].id == currentId) {
beginNext = true;
continue;
}
if (beginNext == true && (cts[ii].id.indexOf(specialSubmitId) > -1 || ((cts[ii].type == "submit" || cts[ii].type == "image") && cts[ii].id.indexOf(exceptionSubmitId) == -1))) {
queryBu = cts[ii]; //找到submit元件
break;
}
else if (beginNext == true && (cts[ii].type == "text" || cts[ii].type == "textarea" || cts[ii].type == "password") && cts[ii].readOnly == false && cts[ii].style.display != "none") {
nextInput = cts[ii]; //找到下一個文字輸入元件
break;
}
}
if (null != queryBu) {
setTimeout("doClickId('" + queryBu.id + "');", 100);
rv = false;
}
else if (null != nextInput) {
try {
nextInput.focus();
} catch (Error) { return true; }
rv = false;
}
}
break;
default:
rv = true;
break;
}
return rv;
}
//實做模擬Click的功能
function doClickId(source) {
var o = document.getElementById(source);
if (document.all && typeof (document.all) == "object") //IE
o.click();
else {
var e = document.createEvent('mouseEvent');
e.initEvent('click', true, true);
o.dispatchEvent(e);
}
}
2011年6月27日 星期一
使用Javascript處理網頁Cookie心得
一、問題說明
在網頁運作過程有時候會使用Client Cookie的技術處理一些個別化的資訊,當我們使用搜尋引擎去搜尋Javascript處理Cookie的技術文章時,可以得到非常多樣的版本,但這些程式碼面對同時需要在主流瀏覽器如IE、Firefox、Chrome會有適用上的問題。
二、蒐集與改作
為了讓處理Cookie的Javascript的程式碼能同時適用於IE、Firefox、Chrome,經個人蒐集、測試、改寫後,彙整成下面程式碼,發布給有此需求的網友使用,並請繼續改良提供修正意見。
三、程式碼
function GetCookieValue(c_name) {
var cookieValue = null;
var search = c_name + "=";
if (document.cookie.length > 0) {
offset = document.cookie.indexOf(search);
if (offset != -1) {
offset += search.length;
end = document.cookie.indexOf(";", offset);
if (end == -1) end = document.cookie.length;
cookieValue = unescape(document.cookie.substring(offset, end))
}
}
return cookieValue;
}
function DeleteCookie(c_name) {
var expiredays = 20;
var exdate = new Date()
exdate.setDate(exdate.getDate() - expiredays)
document.cookie = c_name + "=" + escape(0) + ";path=/" + ";domain=" + location.host + ((expiredays == null) ? "" : ";expires=" + exdate.toUTCString());
}
function SetCookieValue(c_name, value) {
var expiredays = 20;
var exdate = new Date()
exdate.setDate(exdate.getDate() + expiredays)
document.cookie = c_name + "=" + escape(value) + ";path=/" + ";domain=" + location.host + ((expiredays == null) ? "" : ";expires=" + exdate.toUTCString());
}
四、重點說明:
1、GetCookieVaue有多種解法,此版本可以同時適用於各主流瀏覽器。
2、SetCookieValue修改重點是:除了name value expires外一定要加入domain和path的value。
在網頁運作過程有時候會使用Client Cookie的技術處理一些個別化的資訊,當我們使用搜尋引擎去搜尋Javascript處理Cookie的技術文章時,可以得到非常多樣的版本,但這些程式碼面對同時需要在主流瀏覽器如IE、Firefox、Chrome會有適用上的問題。
二、蒐集與改作
為了讓處理Cookie的Javascript的程式碼能同時適用於IE、Firefox、Chrome,經個人蒐集、測試、改寫後,彙整成下面程式碼,發布給有此需求的網友使用,並請繼續改良提供修正意見。
三、程式碼
function GetCookieValue(c_name) {
var cookieValue = null;
var search = c_name + "=";
if (document.cookie.length > 0) {
offset = document.cookie.indexOf(search);
if (offset != -1) {
offset += search.length;
end = document.cookie.indexOf(";", offset);
if (end == -1) end = document.cookie.length;
cookieValue = unescape(document.cookie.substring(offset, end))
}
}
return cookieValue;
}
function DeleteCookie(c_name) {
var expiredays = 20;
var exdate = new Date()
exdate.setDate(exdate.getDate() - expiredays)
document.cookie = c_name + "=" + escape(0) + ";path=/" + ";domain=" + location.host + ((expiredays == null) ? "" : ";expires=" + exdate.toUTCString());
}
function SetCookieValue(c_name, value) {
var expiredays = 20;
var exdate = new Date()
exdate.setDate(exdate.getDate() + expiredays)
document.cookie = c_name + "=" + escape(value) + ";path=/" + ";domain=" + location.host + ((expiredays == null) ? "" : ";expires=" + exdate.toUTCString());
}
四、重點說明:
1、GetCookieVaue有多種解法,此版本可以同時適用於各主流瀏覽器。
2、SetCookieValue修改重點是:除了name value expires外一定要加入domain和path的value。
2010年11月8日 星期一
讓網頁自動設定輸入游標
問題描述:當網頁Load完成以後,如何自動找到可輸入元件,並且設定focus。
解決方案:使用KeyDown Process功能,可以完成自動對焦的功能。
KeyDown Process加入了新的function如下:
//找到第一個可輸入元件,並設定focus
function getFirstInputControl() {
var inputs = document.all && typeof (document.all) == "object" ? document.all : document.getElementsByTagName('input');
for (i = 0; i < inputs.length; i++) {
if ((inputs[i].type == "text" || inputs[i].type == "textarea") && inputs[i].readOnly==false) {
try { inputs[i].focus(); } catch (error) { }
break;
}
}
}
並且在網頁加入啟動功能,語法如下:
window.onload = function () {
document.onkeydown = KeyDownProcess;
getFirstInputControl();
}
有關KeyDown Process功能清參閱:網頁輸入頁面Enter鍵處理元件(KeyDownProcess Version:1.2)
解決方案:使用KeyDown Process功能,可以完成自動對焦的功能。
KeyDown Process加入了新的function如下:
//找到第一個可輸入元件,並設定focus
function getFirstInputControl() {
var inputs = document.all && typeof (document.all) == "object" ? document.all : document.getElementsByTagName('input');
for (i = 0; i < inputs.length; i++) {
if ((inputs[i].type == "text" || inputs[i].type == "textarea") && inputs[i].readOnly==false) {
try { inputs[i].focus(); } catch (error) { }
break;
}
}
}
並且在網頁加入啟動功能,語法如下:
window.onload = function () {
document.onkeydown = KeyDownProcess;
getFirstInputControl();
}
有關KeyDown Process功能清參閱:網頁輸入頁面Enter鍵處理元件(KeyDownProcess Version:1.2)
2010年9月6日 星期一
Windows Media server與IIS server如何同時使用80Port
Windows Media Server與IIS同在一部主機服務且該主機有兩張以上網卡時,如何讓IIS服務與影音串流服務同時使用80Port。
解決方案:
1、IIS網路IP繫結必須指定固定IP。
2、必須宣告Http Ip Listen,法法如下:
netsh http add iplisten ipaddress=x.x.x.x
注意事項:加入的IP是IIS所繫結的IP。
3、宣告完成後就可以啟動影音串流服務HTTP通訊協定,且使用80Port。
解決方案:
1、IIS網路IP繫結必須指定固定IP。
2、必須宣告Http Ip Listen,法法如下:
netsh http add iplisten ipaddress=x.x.x.x
注意事項:加入的IP是IIS所繫結的IP。
3、宣告完成後就可以啟動影音串流服務HTTP通訊協定,且使用80Port。
2009年8月21日 星期五
網頁輸入頁面Enter鍵處理元件(KeyDownProcess Version:1.2)
function KeyDownProcess() {
//-----------------------------------------------------------
//網頁親和性輸入控制元件
//元件功能:可以讓網頁資料的輸入更親切,功能如下:
//1.按下Enter鍵自動找到下一個可輸入輸入元件
//2.按下Enter鍵自動找尋submit按鍵,如果找到則模擬Click的功能
//3.當輸入元件設定唯讀時,按下backspace鍵時,防止網頁轉址
//版本:1.2(2009.08.21)
//作者:科碩資訊有限公司
//引用本元件,請保留作者和版本資訊
//聯絡mail:cursor@cursorinfo.com.tw
//------------------------------------------------------------
var kv = 0;
var rv = false;
var isTextarea = false;
var currentId = null; //目前元件
if (document.all && typeof (document.all) == "object") {
kv = event.keyCode;
isTextarea = (event.srcElement.tagName == "TEXTAREA");
currentId = event.srcElement.id;
}
else {
kv = evt.keyCode;
isTextarea = (evt.target == "TEXTAREA");
currentId = evt.id;
}
switch (kv) {
case 8:
if (currentId.length == 0)
return false;
return !document.getElementById(currentId).readOnly;
case 13:
if (currentId.length == 0)
return false;
if (isTextarea == true) {
rv = isTextarea;
}
else {
var cts = document.all && typeof (document.all) == "object" ? document.all : document.getElementsByTagName('input');
var cid = "";
var queryBu = null;
var beginNext = false; //開始比對是否為輸入元件
var nextInput = null; //下一個輸入元件
var specialSubmitId = "textQueryBU"; //指定特例的submit id
var exceptionSubmitId = "waitting"; //指定例外的submit Id
for (ii = 0; ii < cts.length; ii++) {
if (cts[ii].id == currentId) {
beginNext = true;
continue;
}
if (beginNext == true && (cts[ii].id.indexOf(specialSubmitId) > -1 || ((cts[ii].type == "submit" || cts[ii].type == "image") && cts[ii].id.indexOf(exceptionSubmitId) == -1))) {
queryBu = cts[ii]; //找到submit元件
break;
}
else if (beginNext == true && (cts[ii].type == "text" || cts[ii].type == "textarea" || cts[ii].type == "password") && cts[ii].readOnly == false && cts[ii].style.display != "none") {
nextInput = cts[ii]; //找到下一個文字輸入元件
break;
}
}
if (null != queryBu) {
setTimeout("doClickId('" + queryBu.id + "');", 100);
rv = false;
}
else if (null != nextInput) {
try {
nextInput.focus();
} catch (Error) { return true; }
rv = false;
}
}
break;
default:
rv = true;
break;
}
return rv;
}
//實做模擬Click的功能
function doClickId(source) {
var o = document.getElementById(source);
if (document.all && typeof (document.all) == "object") //IE
o.click();
else {
var e = document.createEvent('mouseEvent');
e.initEvent('click', false, false);
o.dispatchEvent(e);
}
}
function DoRefresh() {
__doPostBack('__Page', 'postback');
}
//-----------------------------------------------------------
//網頁親和性輸入控制元件
//元件功能:可以讓網頁資料的輸入更親切,功能如下:
//1.按下Enter鍵自動找到下一個可輸入輸入元件
//2.按下Enter鍵自動找尋submit按鍵,如果找到則模擬Click的功能
//3.當輸入元件設定唯讀時,按下backspace鍵時,防止網頁轉址
//版本:1.2(2009.08.21)
//作者:科碩資訊有限公司
//引用本元件,請保留作者和版本資訊
//聯絡mail:cursor@cursorinfo.com.tw
//------------------------------------------------------------
var kv = 0;
var rv = false;
var isTextarea = false;
var currentId = null; //目前元件
if (document.all && typeof (document.all) == "object") {
kv = event.keyCode;
isTextarea = (event.srcElement.tagName == "TEXTAREA");
currentId = event.srcElement.id;
}
else {
kv = evt.keyCode;
isTextarea = (evt.target == "TEXTAREA");
currentId = evt.id;
}
switch (kv) {
case 8:
if (currentId.length == 0)
return false;
return !document.getElementById(currentId).readOnly;
case 13:
if (currentId.length == 0)
return false;
if (isTextarea == true) {
rv = isTextarea;
}
else {
var cts = document.all && typeof (document.all) == "object" ? document.all : document.getElementsByTagName('input');
var cid = "";
var queryBu = null;
var beginNext = false; //開始比對是否為輸入元件
var nextInput = null; //下一個輸入元件
var specialSubmitId = "textQueryBU"; //指定特例的submit id
var exceptionSubmitId = "waitting"; //指定例外的submit Id
for (ii = 0; ii < cts.length; ii++) {
if (cts[ii].id == currentId) {
beginNext = true;
continue;
}
if (beginNext == true && (cts[ii].id.indexOf(specialSubmitId) > -1 || ((cts[ii].type == "submit" || cts[ii].type == "image") && cts[ii].id.indexOf(exceptionSubmitId) == -1))) {
queryBu = cts[ii]; //找到submit元件
break;
}
else if (beginNext == true && (cts[ii].type == "text" || cts[ii].type == "textarea" || cts[ii].type == "password") && cts[ii].readOnly == false && cts[ii].style.display != "none") {
nextInput = cts[ii]; //找到下一個文字輸入元件
break;
}
}
if (null != queryBu) {
setTimeout("doClickId('" + queryBu.id + "');", 100);
rv = false;
}
else if (null != nextInput) {
try {
nextInput.focus();
} catch (Error) { return true; }
rv = false;
}
}
break;
default:
rv = true;
break;
}
return rv;
}
//實做模擬Click的功能
function doClickId(source) {
var o = document.getElementById(source);
if (document.all && typeof (document.all) == "object") //IE
o.click();
else {
var e = document.createEvent('mouseEvent');
e.initEvent('click', false, false);
o.dispatchEvent(e);
}
}
function DoRefresh() {
__doPostBack('__Page', 'postback');
}
2009年6月25日 星期四
糟糕,ASP.NET 出現'WebForm_PostBackOptions' 未被定義的錯誤
問題說明:ASP.NET應用程式執行中出現'WebForm_PostBackOptions' 未被定義的錯誤訊息,該怎麼辦?
問題分析:最近有個機會需要將MySQL的日期資料轉為MsSQL的日期資料,在未查明MySQL的日期資料型別前;直接使用long.Paser的Method將資料解析為數值後,直接new DateTime(long),結果就出現了致命性的錯誤;不但AJAX出現下面的問題:
訊息: 語法錯誤
行: 1
字元: 1
程式碼: 0
URI: http://master.cursorinfo.com.tw:7000/AideRegister/WebResource.axd?d=5-EZy3-7lrBUw0173cFa5A2&t=633813918869843750
而且,
ASP.NET應用程式執行中出現'WebForm_PostBackOptions' 未被定義的錯誤。
請教微軟技術諮詢中心沈先生後得到的解答是:
您的錯誤訊息應是頁面直接報錯,目前看來時間戳記是上周四,造成程式碼有問題,可能Web Server上的時間有誤。
沒錯,就是ASP.NET的時間戳記出現了混淆的狀態。
解決方案:
依據沈先生建議,在網路上搜尋解決方案,得到的正解是:重新安裝.NET Framework 2.0即可。
可是重新安裝.NET Framework 2.0有些步驟須注意,因此,將相關方法說明如下,提供有此需求者減少摸索的時間。
重新安裝.NET Framework 2.0步驟:
1.開起系統控制台的新增移除程式,確定已安裝的.NET Framework 2.0的版本。
2.下載該版本的可轉散發套件。
3.將該套件解壓縮在已知的路徑待用。
4.找到新增移除程式中的.NET Framework 2.0,點選這個套件後,在更新的資料中,找到『按這裡取得資源資訊』,然後在彈出的視窗中,找到『修復』按鈕。
5.點選修復按鈕後,進行修復工作。如果原安裝的解壓縮檔已刪除,系統會顯示瀏覽安裝來源的視窗,只要將檔案來源指向剛才解壓縮後的資料夾,即可進行修復工作。
後記:
1.詳查網路資源後,才知道MySQL的日期資料,是unix日期型別,只要使用FROM_UNIXTIME()的函數,就可以解析該日期資料。(MySQL支援該函數)
2.MySQL發佈了Connector元件,可以讓.NET輕鬆存取MySQL資料庫;相當不錯的元件。Thanks.
問題分析:最近有個機會需要將MySQL的日期資料轉為MsSQL的日期資料,在未查明MySQL的日期資料型別前;直接使用long.Paser的Method將資料解析為數值後,直接new DateTime(long),結果就出現了致命性的錯誤;不但AJAX出現下面的問題:
訊息: 語法錯誤
行: 1
字元: 1
程式碼: 0
URI: http://master.cursorinfo.com.tw:7000/AideRegister/WebResource.axd?d=5-EZy3-7lrBUw0173cFa5A2&t=633813918869843750
而且,
ASP.NET應用程式執行中出現'WebForm_PostBackOptions' 未被定義的錯誤。
請教微軟技術諮詢中心沈先生後得到的解答是:
您的錯誤訊息應是頁面直接報錯,目前看來時間戳記是上周四,造成程式碼有問題,可能Web Server上的時間有誤。
沒錯,就是ASP.NET的時間戳記出現了混淆的狀態。
解決方案:
依據沈先生建議,在網路上搜尋解決方案,得到的正解是:重新安裝.NET Framework 2.0即可。
可是重新安裝.NET Framework 2.0有些步驟須注意,因此,將相關方法說明如下,提供有此需求者減少摸索的時間。
重新安裝.NET Framework 2.0步驟:
1.開起系統控制台的新增移除程式,確定已安裝的.NET Framework 2.0的版本。
2.下載該版本的可轉散發套件。
3.將該套件解壓縮在已知的路徑待用。
4.找到新增移除程式中的.NET Framework 2.0,點選這個套件後,在更新的資料中,找到『按這裡取得資源資訊』,然後在彈出的視窗中,找到『修復』按鈕。
5.點選修復按鈕後,進行修復工作。如果原安裝的解壓縮檔已刪除,系統會顯示瀏覽安裝來源的視窗,只要將檔案來源指向剛才解壓縮後的資料夾,即可進行修復工作。
後記:
1.詳查網路資源後,才知道MySQL的日期資料,是unix日期型別,只要使用FROM_UNIXTIME()的函數,就可以解析該日期資料。(MySQL支援該函數)
2.MySQL發佈了Connector元件,可以讓.NET輕鬆存取MySQL資料庫;相當不錯的元件。Thanks.
2009年6月16日 星期二
Events in ASP.NET Master and Content Pages
Master page controls Init event.
Content controls Init event.
Master page Init event.
Content page Init event.
Content page Load event.
Master page Load event.
Master page controls Load event.
Content page controls Load event.
Content page PreRender event.
Master page PreRender event.
Master page controls PreRender event.
Content page controls PreRender event.
Master page controls Unload event.
Content page controls Unload event.
Master page Unload event.
Content page Unload event.
Source Url:http://msdn.microsoft.com/en-us/library/dct97kc3.aspx
Content controls Init event.
Master page Init event.
Content page Init event.
Content page Load event.
Master page Load event.
Master page controls Load event.
Content page controls Load event.
Content page PreRender event.
Master page PreRender event.
Master page controls PreRender event.
Content page controls PreRender event.
Master page controls Unload event.
Content page controls Unload event.
Master page Unload event.
Content page Unload event.
Source Url:http://msdn.microsoft.com/en-us/library/dct97kc3.aspx
訂閱:
文章 (Atom)