我正在使用此页面上的jqueryui日期选择器 - http://jqueryui.com/demos/datepicker/
如何在标签上调用它,而不是在输入字段上?这是否可行?
我正在使用此页面上的jqueryui日期选择器 - http://jqueryui.com/demos/datepicker/
如何在标签上调用它,而不是在输入字段上?这是否可行?
我没有查看代码,但我怀疑它假定与一个<input type="text">
元素相关联。
因此,请假设您必须拥有该元素。
您可以隐藏<input>
并通过从标签事件调用其方法与日期选择器交互。
$(labelselector).click(function() {
$(inputselector).datepicker('show');
});
关于定位问题
以上建议对我来说无法实现干净的UI。当人们点击标签时,我需要激活我的日期选择器控件,而我不想显示文本框(上面的CSS尝试已经接近了,但仍然存在文本框获得焦点等其他问题)。
对我来说最好的解决方案是将日期选择器连接到的文本框更改为。这为我解决了所有问题(我将隐藏的输入控件放在标签之前,以使标签的偏移量正确)。
值得注意的是,将普通输入控件的样式设置为display:none或visibility:hidden等并不能解决问题。
这个解决方案之所以起作用,是因为日期选择器控件源代码中的子句仅在"type != 'hidden'"时执行某些功能。
$(function() {
$("#datepicker").datepicker();
$("#alternate").click(function() {
$("#datepicker").focus();
});
$("#datepicker").change(function() {
$("#alternate").html($("#datepicker").val());
});
});
<input id="datepicker" style="display:none" /><label id="alternate">change me</label>
在FireFox 3.5中,这对我很好用。
关于定位问题:
看起来Datepicker会根据其目标元素的偏移量绝对设置其位置。不幸的是,display:none元素没有偏移量。
有两种建议的方法:
1)使用datepicker自己的方法和您选择的对象的偏移量来设置位置。尝试类似以下的内容:
offset = $('myinput').parent('label').offset();
$('#date-picker').dpSetOffset(offset.left, offset.top);
2) 尝试使用不同的隐藏输入方法,例如 opacity: 0(以及它的 IE 等效 filter:alpha(opacity=x))。另一个尝试的方法可能是设置一堆样式来减小输入字段的大小,例如:
.my_input {
border: 0;
line-height: 0;
font-size: 0;
height: 0;
overflow: hidden;
}
尽可能使输入框在可见页面上不可见,但实际上不要将其从可见页面中删除,因为日期选择器需要从中获取位置。
padding: 0px
。 - federdisplay-inline
div中放置一个输入框,并使用opacity: 0
, position: absolute
+ pointer-events: none
让该输入框在视觉上不可见来解决这个问题。日期选择器初始化在输入(文本框)元素上,但根据此错误,它无法在隐藏的输入上初始化。我在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'];