近期在研究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;
}
}
这样就可以完全兼容于所有的区域了。
(全文完)
完整示例及源码下载地址是:
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;
}
}
这样就可以完全兼容于所有的区域了。
(全文完)