我似乎无法在隐藏字段上显示来自jQuery UI的日期选择器,因为我收到此错误:
Uncaught TypeError: Cannot read property 'left' of undefined
Run Code Online (Sandbox Code Playgroud)
当我使用常规文本字段时,我似乎没有问题.我得到这个错误既jQuery UI 1.9.0和1.9.2,版本jQuery is 1.8.3
HTML
<table>
<tr>
<td>
<small class="date_target">until <span>Dec. 31, 2013</span></small>
<input type="hidden" class="end_date" />
</td>
</tr>
</table>
Run Code Online (Sandbox Code Playgroud)
JS
$(".end_date").datepicker({
dateFormat: 'yyyy-mm-yy',
yearRange: '-00:+01'
});
$('.date_target').click(function () {
$(this).next().datepicker('show');
});
Run Code Online (Sandbox Code Playgroud)
我在此提供了一个(不)工作示例的jsfiddle太
zer*_*ro0 11
这是因为浏览器看不到输入字段(因为它是隐藏的).
试试这个:
<input type="text" style="height: 0px; width:0px; border: 0px;" class="end_date" />
Run Code Online (Sandbox Code Playgroud)
你很好 当然,您可以将额外的样式属性添加到CSS类"end_date"."display:none"无济于事,因为那时该字段再次完全不可见.
JS小提琴中的例子.
我们来检查一下datepicker _findPos函数
$.datepicker._findPos = function (obj) {
var position,
inst = this._getInst(obj),
isRTL = this._get(inst, "isRTL");
while (obj && (obj.type === "hidden" || obj.nodeType !== 1 || $.expr.filters.visible(obj))) {
obj = obj[isRTL ? "previousSibling" : "nextSibling"];
}
position = $(obj).offset();
/*because position of invisible element is null, js will break on next line*/
return [position.left, position.top];
};
Run Code Online (Sandbox Code Playgroud)
如果datepicker的目标obj是不可见的,它将使用不可见的最近的兄弟位置
有几种解决方案:
解决方案1
由于LTR,您可以交换两个元素的位置
<tr>
<td>
<input type="hidden" class="end_date" />
<small class="date_target">until <span>Dec. 31, 2013</span></small>
</td>
</tr>
Run Code Online (Sandbox Code Playgroud)
解决方案2
在隐藏元素旁边添加一个可见元素,因此datepicker将找到可见元素位置
<tr>
<td>
<small class="date_target">until <span>Dec. 31, 2013</span></small>
<input type="hidden" class="end_date" /><span> </span>
</td>
</tr>
Run Code Online (Sandbox Code Playgroud)
解决方案3
重新定义_findPos函数,以便您可以在任何地方设置日历的位置
$.datepicker._findPos = function (obj) {
var position,
inst = this._getInst(obj),
isRTL = this._get(inst, "isRTL");
while (obj && (obj.type === "hidden" || obj.nodeType !== 1 || $.expr.filters.visible(obj))) {
obj = obj[isRTL ? "previousSibling" : "nextSibling"];
}
position = $(obj).offset();
// if element type isn't hidden, use show and hide to find offset
if (!position) { position = $(obj).show().offset(); $(obj).hide();}
// or set position manually
if (!position) position = {left: 999, top:999};
return [position.left, position.top];
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
32138 次 |
| 最近记录: |