【发布时间】:2011-09-26 15:07:28
【问题描述】:
我正在尝试将 jQuery datepicker 附加到超链接而不是传统的 input 元素。我知道这已经被讨论过 here 和 there 这导致我实现了这个:
$(document).ready(function()
{
var picker_link_id = "datepicker_link"
var picker_div_id = "datepicker"
var picker_div = $("#" + picker_div_id)
// initialize the datepicker
picker_div.datepicker({
onSelect:
function(dateText, picker) {
picker_div.hide();
// custom work
}
});
// position & toggle the datepicker on link click
$("#" + picker_link_id).click(function() {
var $this = $(this)
// position the datepicker
picker_div.css('position', 'absolute');
picker_div.css('left', $this.position().left - (picker_div.width() - $this.width()));
picker_div.toggle()
return false;
});
// pressing ESC or clicking outside the datepicker should close it
$(document)
.bind("keypress", function(e) {
if ( e.keyCode == 27 )
picker_div.hide();
})
.bind("mousedown", function(e) {
if ( e.target.id == $("#" + picker_link_id)[0].id )
return;
if ( e.target.id != picker_div_id && $(e.target).parents('#' + picker_div_id).length == 0 )
picker_div.hide();
});
});
在我看来,我有以下 HTML:
<a href="#" id="datepicker_link">September 26, 2011</a>
<div id="datepicker"></div>
尽管上述方法有效,但似乎我正在重新创建一些 jQuery 逻辑。有没有更好的方法来做到这一点?
【问题讨论】:
-
我不明白您为什么要在单击锚点时定位日期选择器...您不能简单地保留
picker_div.toggle()声明吗? -
@WilliamNiu,我定位
picker_div给它一种“覆盖”的感觉。如果我只是在日期选择器变得可见并将其他元素推开时切换它。
标签: javascript jquery html ruby-on-rails jquery-ui