我有一个非常简单的html页面,其中包含以下javascript
$(function() {
$( "#datepicker" ).datepicker({
changeMonth: true,
changeYear: true
});
$( "#datepicker" ).datepicker( "option", "dateFormat", "yy-mm-dd" );
});
然后我有输入目标元素
<input id="datepicker" type="text" class="boxtpl" name="${field.name}" value="${release?.startDate}">
我看到来自观看源的输入的html是有效的......
<input id="datepicker" type="text" class="boxtpl" name="release.startDate" value="2012-02-07">
所以,当我执行GET请求获取此页面时,我的日期只会呈现我是否删除javascript中设置格式非常重要的最后一行,因为这是我为playframework配置的格式! !如果我没有设置格式,则POST会因为格式不匹配而中断:(
为什么设置datepicker的格式清除我的日期????
我可以尝试编写更多脚本来手动设置它虽然我尝试调用api来设置它并且DID不能正常工作所以它可能无法正常运行原始javascript设置......还不确定。任何人都知道为什么会发生或更好但如何解决它?
感谢, 迪安
答案 0 :(得分:5)
不确定它是否是jquery ui中的错误,但似乎设置格式有效地删除了默认值。您可以使用链接
来解决此问题.datepicker("setDate", datepicker_default_val );
但是,我在我的网络应用程序中所做的是定义一个CSS类“.datepicker”,然后编写此代码片段,为该类的任何人提供日期选择器。
$( ".datepicker" ).each( function(index){
var datepicker_default_val = $(this).val();
$( this ).datepicker({numberOfMonths: 3, showButtonPanel: true});
$( this ).datepicker( "option", "dateFormat", 'yy-mm-dd' );
$( this ).datepicker("setDate", datepicker_default_val );
});
这样做是抓取带有标记类的每个元素,将默认值保存到本地var datepicker_default_val ,设置格式,然后然后恢复该值。
一点点黑客,但把它放在$(文件).ready(function(){});阻止,你应该是好的。
答案 1 :(得分:1)
你是什么意思:
然后POST因为格式不匹配而中断
另外,我不太明白你的GET和POST请求是什么意思?你的意思是形式方法吗?在这种情况下,您应该使用周围的表单标记修改HTML代码并添加提交按钮,以便我们能够准确理解您的需求并尝试重现该问题。
无论如何,看看这是否是你想要的:http://jsfiddle.net/DAMEj/
实际上,除了CSS之外,我还包括了Jquery UI库,以便对代码进行全面测试。
此外,我没有达到这些属性的目的name="${field.name}" value="${release?.startDate}"
,你能澄清一下吗?
最后,究竟什么对你不起作用?
编辑:
根据我上次关于默认日期显示的评论,请查看http://jsfiddle.net/sidou/ZUrPj/,看看它是否符合您的需求。
快乐的JS摆弄;)
答案 2 :(得分:1)
如果输入字段与默认的dateFormat不匹配,则只删除它。 第二行中的选项设置为时已晚,在第一行之后它已被删除。
解决方案:在第一次调用中设置dateFormat:
$( "#datepicker" ).datepicker({
changeMonth: true,
changeYear: true,
dateFormat: "yy-mm-dd"
});
答案 3 :(得分:0)
如果jQuery无法解析输入值,它确实会从输入字段中删除该值(如果设置了输入字段,甚至可以从altField中删除)。
例如,使用不同的语言环境时可能会发生这种情况。如果您将datepicker dateFormat设置为'dd MM yy'并使用法语本地化,它将解析“10 Mars 2012”,但是“2012年3月10日”的值将被删除。
答案 4 :(得分:0)
在我的情况下,我发现JQuery被一个“formoid”解决方案所取代,所以,我只是替换重新注入数据的函数,添加行
“value”:date.attr(“value”)
我也和Shaun的答案混在一起:
jQuery(".formoid-flat-blue").find('input[type=date]').each(function(){
var date = $(this);
var datepicker_default_val = $(this).val();
var text = $('<input type="text">');
text.get(0).className = date.get(0).className;
text.attr({
"name": date.attr("name"),
"placeholder": date.attr("placeholder"),
"required": date.attr("required"),
"value": date.attr("value")
});
date.replaceWith(text);
text.datepicker({
format: _dateFormat || date.attr("data-format") || 'yyyy-mm-dd'
});
if (datepicker_default_val) {
text.datepicker({
setDate: datepicker_default_val
});
}
});