2012-01-05 52 views
2

我有以下问题。 我有一个jquery Datepicker,并希望在datepicker打开时显示一些附加信息。 当我做使用Firebug的控制台下,它按预期工作jQuery Datepicker onChangeMonthYear append

$("#ui-datepicker-div").append("additional text"); 

但是当我做使用“onChangeMonthYear” - 选项相同:

$("#datepicker").datepicker({ 
    onChangeMonthYear: function(year, month, inst) { 
     $("#ui-datepicker-div").append("additional text"); 
    } 
}); 

它不会显示“附加文本”。

有什么建议?!

感谢

+0

如果答案帮你解决你的问题,你应该接受它,所以它可以帮助别人,以及([常见问题](http://stackoverflow.com/faq#howtoask)) – 2012-01-13 09:53:49

回答

0

尝试

var changed = false; 

$("#datepicker").datepicker({ 
    onChangeMonthYear: function(year, month, inst) { 
     changed = true; 
    } 
}); 

if(changed) { 
     $("#ui-datepicker-div").append("additional text"); 
} 
+0

不,这是行不通的 – matthias 2012-01-05 08:43:46

+0

看到我在PanJanek的建议更新的代码 – 2012-01-05 08:50:57

0

'#UI的日期选择器-DIV' 是通过日期选择器脚本创建每当datepicked希望它能够被刷新。附加的文本可能随时被覆盖。 您应该在'#datepicker'元素之外创建自己的占位符,在其中附加文本,并使用CSS定位,以使其看起来正确。

2

问题是,当onChangeMonthYear事件触发时,新日历表尚未创建。因此它附加了文本,但是整个内容被新表替换。

使用超时追加文本,这将确保内容在插入前由插件重新创建。

var appendTimeout; 

function appendText(text) { 
    clearTimeout(appendTimeout); 
    appendTimeout= setTimeout(function() { 
     $('#ui-datepicker-div').append('<div>' + text + '</div>'); 
    }, 50); 
} 

$("#datepicker").datepicker({ 
    beforeShow: function() { 
     appendText('initialAppendedText'); 
    }, 
    onChangeMonthYear: function(year, month, inst) { 
     appendText('whenMonthIsChanged'); 
    } 
}); 

我已经设置了10ms的超时时间,但您可以增加一点这个值。

工作例如在jsfiddle

+0

它可能会工作,但你不能确定10ms超时将永远足够。通过执行一些其他线程或处理器可能会忙于其他的东西,浏览器可能会在那一瞬间变慢一点。第二件事:文本只有在datepicker刷新之前才可见。 – PanJanek 2012-01-05 09:11:48

+0

我已经提到,由于这个原因,超时时间可能会增加。他也可以用'beforeShow'事件来处理文本的初始追加。国际海事组织,这是“最简单的”解决方案,因为在datepicker div之外添加elemtn可能会变成令人头痛的事情,从而将整个事件聚集在一起...... – 2012-01-05 09:15:00