1

我整天都在看论坛和教程,我似乎无法弄清楚这一点。我是 100% 的 asp.net 和网页设计(html 等)新手;我已经使用 winforms 和 vb.net 几个月了。

我在页面上有一个文本框(ID=DOBTextbox),我正在尝试实现 javascript 代码,当文本框文本长度至少为 6 个字符(或者更好,可以评估为日期)时,文本会更改到特定的日期格式(最好是 MMM dd、yyyy,但我愿意使用内置的 javascript 日期转换器函数来接近它)。我想使用 javascript,因为我希望它是客户端驱动的。

按照这些方面的许多示例,我知道我需要在我的源文件中创建一个函数,并且我可以将一个属性添加到我的代码隐藏文件中。

<script type="text/javascript">
function reformatDate(inputDate) {
    var outputDate = inputDate.toString();
    return outputDate;
}
</script>

在我的代码隐藏中:

DOBTextBox.Attributes.Add("onblur", "reformatDate('" & DOBTextBox.Text & "')")

但是,当我离开文本框时没有任何反应。

注意:我使用“onblur”是因为我一直在尝试。我的第一个偏好是当用户更改文本框的文本时触发的事件。另外,我在函数中使用了“.tostring()”,因为我收到一个错误,提示无法识别 todatestring()(我认为 todatestring() 输出更接近我想要的格式)。

提前感谢您的帮助!!!

4

1 回答 1

1

你可能想要这个:

DOBTextBox.Attributes.Add("onblur", "reformatDate(this.value);")

使用您的代码,您正在尝试将 ASP.NET 代码和 javascript 结合起来。ASP.NET 在发送到浏览器时是静态的,而 javascript 是动态的。使用代码时,您是在将 ASP.NET 代码运行到属性中时对文本框的值进行硬编码。所以 HTML 可能会呈现为:

<input type="text" id="whatever" name="whatever" value="10/24/2001" onblur="reformatDate('10/24/2001')" />

通过我的更改,它将使 javascript 在文本框模糊时获取文本框的值并将其传递给reformatDate函数。所以它将呈现为:

<input type="text" id="whatever" name="whatever" value="10/24/2001" onblur="reformatDate(this.value)" />

您可能想要使用onchange, not onblur,以便该函数仅在文本框的值更改时触发,而不仅仅是在文本框模糊时触发。

更新:

ASP.NET 代码需要更改为:

DOBTextBox.Attributes.Add("onblur", "this.value = reformatDate(this.value);")

以便将文本框的值重新设置为转换后的值。

更新2:

尝试将您的功能更改为:

function reformatDate(inputDate) {
    if (inputDate.length > 5) {                  // Least amount of characters for possible date
        var outputDate = new Date(inputDate);    // Convert input to date object
        if (!isNaN(outputDate.getTime())) {      // Makes sure the date is valid
            return outputDate.toDateString();    // Return formatted date only if valid
        }
    }
    return inputDate;    // Return original value if invalid date
}
于 2012-10-15T03:44:55.567 回答