2011-12-09 86 views
1

在我的MVC 2应用程序中,我有很多很多输入字段的视图。其中很多都包含DateTime变量。jQuery - 通过添加类来执行功能?

我使用datepicker jQuery插件来帮助用户选择日期。这也使我能够做到以下几点在我的母版:

$(document).delegate(".hasDatepicker", "keyup", function() { 
      this.value = this.value.replace(/[^0-9\.\/]/g, ''); 
}); 

这是使用不正确的字符,如果他们喜欢敲消除用户。由于Datepicker将自己的类添加到datepicker-elements中,因此我无法使用该类自动清理输入。 这里没有问题,这是工作的一部分,它应该。

但是,问题是,当我打开编辑视图时,文本框填充“21/05/2012 0:00:00”。一旦你开始使用Datepicker插件,它就会变成只有日期,因为它应该。 要从文本中删除时间部分,我想这样做:

$(".hasDatepicker").each(function() { 
    $(this).val($this.val().replace(" 0:00:00","")); 
}); 

这在我看来是最简单的解决方案。

但是我不得不将它添加到每个页面,我想知道是否有一种方法可以使.delegate()版本。东西沿线

$(document).delegate(".hasDatepicker", SOME_EVENT, function() { 
      $(this).val($this.val().replace(" 0:00:00","")); 
}); 

问题是,SOME_EVENT应该是什么?我想这时候已经加入了“hasDatepicker”级,被触发,这样我知道哪些文本框以清除(还有其他的文本框的言论等也含有该字符串,但这些应该更换。

是否有这样的事件触发类改变? 或者任何其他方式来解决这个问题,我不必复制粘贴到每一页?:)

+0

千万用户需要能够在文本框中键入?你能强迫他们总是使用JQuery日期时间选择器吗? –

回答

1

为什么要使用这种复杂的方式来编辑日期格式时,jQuery的日期选择器有一个内置的功能只是使用dateformat选项做:

来回jQuery UI的文档:

解析和显示日期的格式。此属性是 的区域化属性之一。有关可能的 格式的完整列表,请参阅formatDate函数。

代码示例

Initialize a datepicker with the dateFormat option specified. 
$(".selector").datepicker({ dateFormat: 'yy-mm-dd' }); 
Get or set the dateFormat option, after init. 
//getter 
var dateFormat = $(".selector").datepicker("option", "dateFormat"); 
//setter 
$(".selector").datepicker("option", "dateFormat", 'yy-mm-dd'); 
0

我建议你在服务器上使用格式,所以时间部分不会被填充到文本框中。像:new DateTime().ToShortDateString()或通过为此创建特殊格式。

你可以使用EditorFor等记载here

+0

对不起,如果这是一个愚蠢的问题,但是如果你使用“Html.TextBoxFor(x => x.StartDate,...”?问题是我没有填充文本框,MVC正在为我做这件事:)而且Entity Framework持有StartDate变量,所以如果我必须手工完成,我将不得不添加变量到我的模型并手动添加并从那里检索它们? – Flater

+0

使用'Html.EditorFor(x => x.StartDate,...)'并为DateTime创建一个自定义EditorTemplate(就像我在答案中的链接中所述) –