jquery ui datepicker从输入字段中删除我的文本

时间:2012-02-16 03:04:59

标签: jquery-ui

我有一个非常简单的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设置......还不确定。任何人都知道为什么会发生或更好但如何解决它?

感谢, 迪安

5 个答案:

答案 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
        });
    }
});