Truly
写精彩代码 品暇逸人生
近期在研究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;
    }
}

这样就可以完全兼容于所有的区域了。
(全文完)
posted on 2006-12-27 11:27  Truly  阅读(558)  评论(0编辑  收藏  举报