近期在研究MS的AJAX Control Toolkit(代號Atlas),其中AlwaysVisibleControl Demonstration樣本有一個小錯誤
完整樣本及源碼是:
http://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=AtlasControlToolkit
其中/SampleWebSite/AlwaysVisibleControl/AlwaysVisibleControl.aspx頁面上有一個updateTime函數是不正確的。
function updateTime()
{
var label = document.getElementById('ctl00_ContentPlaceHolder1_currentTime');
if (label) {
var time = (new Date()).toLocaleTimeString();
time = time.match(/^(\s*\d{1,2}\s*\:\s*\d{1,2}\s*\:\s*\d{1,2}\s*[A-Za-z]{2}).*$/)[1];
label.innerHTML = time;
}
}
在中文作業系統或者是地區選項選擇了中國的系統上,將無法工作正常。問題處在正則匹配的地方,因為美國的時間格式是10:50:27 AM,所以可以用(/^(\s*\d{1,2}\s*\:\s*\d{1,2}\s*\:\s*\d{1,2}\s*[A-Za-z]{2}).*$/)來匹配,但是對於中國的時間格式則是11:21:15是不帶AM/PM的,所以匹配結果是null,導致了js錯誤,同時這裡再複習一個小知識,對於正則匹配,數組的0元素包含整個匹配,而第 1 到 n 元素包含了匹配中曾出現過的任一個子匹配。最後,我們將js函數修改如下:
function updateTime()
{
var label = document.getElementById('ctl00_ContentPlaceHolder1_currentTime');
if (label) {
var time = (new Date()).toString();
time = time.match(/(\d{1,2}\s*\:\s*\d{1,2}\s*\:\s*\d{1,2}).*/)[1];
label.innerHTML = time;
}
}
這樣就可以完全相容於所有的地區了。
(全文完)