在 mouseleave 事件上关闭 daterangepicker
To close daterangepicker on mouseleave event
我在我的应用程序中使用了 daterangepicker 库。我想触发 daterangepicker 的内部方法 .hide() 一旦使用离开 daterangepicker 容器区域。我的代码看起来像这样。
<body class="visual-sandbox">
<div class="visual-rangepicker">
<div id="reportrange" class="report-range">
<div class="calendar-icon">
<i class="glyphicon glyphicon-calendar fa fa-calendar"></i>
</div>
<span></span> <b class="caret caret-dropdown"></b>
</div>
</div>
</body>
$("#reportrange").daterangepicker(
{
startDate: start,
endDate: end,
opens: 'left',
ranges: {
// new Date(2017, 11, 1)
Today: [moment(new Date()), moment(new Date())],
Yesterday: [
moment(new Date()).subtract(1, "days"),
moment(new Date()).subtract(1, "days")
],
"Last 7 Days": [moment(new Date()).subtract(6, "days"), moment(new Date())],
"Last 30 Days": [moment(new Date()).subtract(29, "days"), moment(new Date())],
"This Month": [moment(new Date()).startOf("month"), moment(new Date()).endOf("month")],
"Last Month": [
moment(new Date())
.subtract(1, "month")
.startOf("month"),
moment(new Date())
.subtract(1, "month")
.endOf("month")
],
"Last Year": [
moment(new Date())
.subtract(1, "year")
.startOf("year"),
moment(new Date())
.subtract(1, "year")
.endOf("year"),
]
}
},
cb
).on;
cb(start, end);
现在假设#reportrange 包含区域是body 标签。我想应用类似这个功能并关闭当前打开的 daterangepicker。
$('body').on('mouseleave', function(){
$('#reportrange').trigger('hide.daterangepicker'); //it doesn't work.
});
像这样的简单解决方案。
$('body').on('mouseleave', function(){
$('#reportrange').hide();
});
可以正常工作并隐藏该特定区域,但用户必须单击两次才能再次打开该日期范围选择器。因为第一次点击再次关闭选择器(切换),第二次点击打开它。
要正确理解它,如果你去这个 JSFiddle https://jsfiddle.net/rg7fh1a8/
现在,如果用户悬停在它的区域之外,我想关闭这个 daterangepicker。
此解决方案在 daterangepicker 中找到取消按钮并以编程方式单击它。它假定 daterangepicker 库正在使用当前版本分配给它的控件的默认 classes。这些 class 名称是通过使用 chrome 开发工具检查呈现的 HTML 中的 daterangepicker 元素找到的。
避免将 onmouseleave
放在 body 本身上(除非您将 on
与选择器一起使用)。在本示例中,我已将其附加到 class。
$(function() {
$('#reportrange').daterangepicker();
});
function init() {
$('.daterangepicker').on("mouseleave", function() { $(this).find('.cancelBtn').click() });
}
$(init);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/jquery/latest/jquery.min.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/momentjs/latest/moment.min.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/daterangepicker/daterangepicker.min.js"></script>
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/daterangepicker/daterangepicker.css" />
<div class="visual-rangepicker">
<input id="reportrange" value="01/01/2015 - 01/31/2015">
</div>
日期范围选择器可用 hide.daterangepicker
事件。转到 http://www.daterangepicker.com/#events,检查隐藏事件。
我知道已经有一个可接受的答案,但我认为这也可能有用,因为它使用了 daterangepicker 的本机隐藏功能,而不是模拟点击取消按钮:
$(function(){
$('.daterangepicker').mouseleave(function(){
$('#reportrange').data('daterangepicker').hide();
});
});
我在我的应用程序中使用了 daterangepicker 库。我想触发 daterangepicker 的内部方法 .hide() 一旦使用离开 daterangepicker 容器区域。我的代码看起来像这样。
<body class="visual-sandbox">
<div class="visual-rangepicker">
<div id="reportrange" class="report-range">
<div class="calendar-icon">
<i class="glyphicon glyphicon-calendar fa fa-calendar"></i>
</div>
<span></span> <b class="caret caret-dropdown"></b>
</div>
</div>
</body>
$("#reportrange").daterangepicker(
{
startDate: start,
endDate: end,
opens: 'left',
ranges: {
// new Date(2017, 11, 1)
Today: [moment(new Date()), moment(new Date())],
Yesterday: [
moment(new Date()).subtract(1, "days"),
moment(new Date()).subtract(1, "days")
],
"Last 7 Days": [moment(new Date()).subtract(6, "days"), moment(new Date())],
"Last 30 Days": [moment(new Date()).subtract(29, "days"), moment(new Date())],
"This Month": [moment(new Date()).startOf("month"), moment(new Date()).endOf("month")],
"Last Month": [
moment(new Date())
.subtract(1, "month")
.startOf("month"),
moment(new Date())
.subtract(1, "month")
.endOf("month")
],
"Last Year": [
moment(new Date())
.subtract(1, "year")
.startOf("year"),
moment(new Date())
.subtract(1, "year")
.endOf("year"),
]
}
},
cb
).on;
cb(start, end);
现在假设#reportrange 包含区域是body 标签。我想应用类似这个功能并关闭当前打开的 daterangepicker。
$('body').on('mouseleave', function(){
$('#reportrange').trigger('hide.daterangepicker'); //it doesn't work.
});
像这样的简单解决方案。
$('body').on('mouseleave', function(){
$('#reportrange').hide();
});
可以正常工作并隐藏该特定区域,但用户必须单击两次才能再次打开该日期范围选择器。因为第一次点击再次关闭选择器(切换),第二次点击打开它。
要正确理解它,如果你去这个 JSFiddle https://jsfiddle.net/rg7fh1a8/ 现在,如果用户悬停在它的区域之外,我想关闭这个 daterangepicker。
此解决方案在 daterangepicker 中找到取消按钮并以编程方式单击它。它假定 daterangepicker 库正在使用当前版本分配给它的控件的默认 classes。这些 class 名称是通过使用 chrome 开发工具检查呈现的 HTML 中的 daterangepicker 元素找到的。
避免将 onmouseleave
放在 body 本身上(除非您将 on
与选择器一起使用)。在本示例中,我已将其附加到 class。
$(function() {
$('#reportrange').daterangepicker();
});
function init() {
$('.daterangepicker').on("mouseleave", function() { $(this).find('.cancelBtn').click() });
}
$(init);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/jquery/latest/jquery.min.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/momentjs/latest/moment.min.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/daterangepicker/daterangepicker.min.js"></script>
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/daterangepicker/daterangepicker.css" />
<div class="visual-rangepicker">
<input id="reportrange" value="01/01/2015 - 01/31/2015">
</div>
日期范围选择器可用 hide.daterangepicker
事件。转到 http://www.daterangepicker.com/#events,检查隐藏事件。
我知道已经有一个可接受的答案,但我认为这也可能有用,因为它使用了 daterangepicker 的本机隐藏功能,而不是模拟点击取消按钮:
$(function(){
$('.daterangepicker').mouseleave(function(){
$('#reportrange').data('daterangepicker').hide();
});
});