我一直在寻找论坛和教程,我似乎无法弄清楚这一点。我是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()输出更接近我喜欢的格式。)
提前感谢您的帮助!!!
答案 0 :(得分: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
,而不是onblur
,以便该功能仅在文本框的值更改时触发,而不仅仅是文本框模糊。
更新:
ASP.NET代码需要更改为:
DOBTextBox.Attributes.Add("onblur", "this.value = reformatDate(this.value);")
以便将文本框的值重新设置为转换后的值。
UPDATE2:
尝试将您的功能更改为:
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
}