如何将jquery datepicker调用/绑定到标签或div而不是输入字段

我正在使用此页面上的jqueryui datepicker – http://jqueryui.com/demos/datepicker/

如何在标签而不是输入字段上调用它? 这可能吗?

我没有查看代码,但我怀疑它假定它附加到元素。

所以假设你必须拥有那个元素。

您可以隐藏并通过调用标签事件中的方法与datepicker交互。

 $(labelselector).click(function() { $(inputselector).datepicker('show'); }); 

re:定位问题

以上建议对我来说无法获得一个干净的用户界面。 当人们点击标签时我激活了我的日期选择器控件,我根本不想显示文本框(上面的css尝试很接近,但文本框仍然集中在其他问题中)。

我的解决方案是将日期选择器附加到这解决了我的所有问题(我把隐藏的输入控件放在标签之前,以便输入控件的偏移量适合我的标签)。

值得注意的是,将正常输入控件样式设置为display:none或visibility:hidden等不起作用。

此解决方案工作的原因是由于datepicker控件的源中的子句仅在“type!=”hidden“时才执行某些function。

您是否尝试将其绑定以便在点击时显示,或者结果填充Label或Div? 您可以将其绑定到隐藏文本框,然后将所需效果绑定到该隐藏字段的change()事件。

 $(function() { $("#datepicker").datepicker(); $("#alternate").click(function() { $("#datepicker").focus(); }); $("#datepicker").change(function() { $("#alternate").html($("#datepicker").val()); }); });  

这在FireFox 3.5中对我来说很好

re:定位问题:

看起来像Datepicker绝对根据它所针对的元素的偏移来设置它的位置。 不幸的是,display:none元素没有偏移量。

两种建议的方法:

1)使用datepicker自己的方法和您选择的对象的偏移量来设置位置。 尝试以下方法:

 offset = $('myinput').parent('label').offset(); $('#date-picker').dpSetOffset(offset.left, offset.top); 

2)尝试一种隐藏输入的不同方法,可能是不透明度:0(和IE等效,滤镜:alpha(opacity = x))。 另一件事可能是设置一堆样式来减少输入字段,例如:

 .my_input { border: 0; line-height: 0; font-size: 0; height: 0; overflow: hidden; } 

获取尽可能接近不可见的输入,而不实际将其从可见页面中删除,它需要存在才能使datepicker从中获取位置。

我想要一个文本作为我的触发器。 我通过在display-inline div中输入输入来解决这个问题,使用opacity: 0输入几乎不可见opacity: 0position: absolute + pointer-events: none

请参阅我的示例: http : //codepen.io/KATT/pen/XJbmVr

Datepciker初始化输入(文本框)元素,但根据此错误,它无法在隐藏输入上初始化。 我发现了jqueryUi中有点源更改的技巧:

 _findPos: function(obj) { var inst = this._getInst(obj); var isRTL = this._get(inst, 'isRTL'); while (obj && (obj.type == 'hidden' || obj.nodeType != 1 || $.expr.filters.hidden(obj))) { obj = obj[isRTL ? 'previousSibling' : 'nextSibling'] || obj.parentNode; } 

改变就在这里

  obj = obj[isRTL ? 'previousSibling' : 'nextSibling'];