javascript - 使用 daterangepicker 中的日期数据自动提交表单
问题描述
我有这个脚本几乎可以工作。我想要的是选择日期时,使用所需数据自动提交表单。此脚本当前拆分日期并将它们放在隐藏的输入字段中。然后它搜索数据库并显示结果。很简单,对。
我通宵阅读,明白了这一点。我遇到的问题是表单提交但不包含数据。
<script>
$('input.date_range').daterangepicker({
"alwaysShowCalendars": true,
"showDropdowns": true,
autoApply:true,
ranges: {
'Today': [moment(), moment()],
'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
'Last 7 Days': [moment().subtract(6, 'days'), moment()],
'Last 30 Days': [moment().subtract(29, 'days'), moment()],
'This Month': [moment().startOf('month'), moment().endOf('month')],
'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')]
},
});
$('form').submit(function (ev, picker) {
[startDate, endDate] = $('.date_range').val().split(' - ');
$(this).find('input[name="datemin"]').val(startDate);
$(this).find('input[name="datemax"]').val(endDate);
});
$("input.date_range").change(function() {
console.log($("input.date_range").val());
$('form').delay(200).submit();
});
这部分在这里$("input.date_range").change(function() {
console.log($("input.date_range").val());
$('form').delay(200).submit();
});
提交表单就好了。只是没有发送数据。
我试过这样:
$("input.date_range").change(function() {
$('form').submit(function (ev, picker) {
[startDate, endDate] = $('.date_range').val().split(' - ');
$(this).find('input[name="datemin"]').val(startDate);
$(this).find('input[name="datemax"]').val(endDate);
});
console.log($("input.date_range").val());
$('form').delay(200).submit();
});
但这不起作用。不过,日期范围会发送到控制台。
我知道我很接近。只是在这里遗漏了一些东西。任何帮助表示赞赏。
测试答案:
$('input.date_range').daterangepicker(
// Options
{
"alwaysShowCalendars": true,
"showDropdowns": true,
autoApply:true,
ranges: {
'Today': [moment(), moment()],
'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
'Last 7 Days': [moment().subtract(6, 'days'), moment()],
'Last 30 Days': [moment().subtract(29, 'days'), moment()],
'This Month': [moment().startOf('month'), moment().endOf('month')],
'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')]
}
},
// Callback
function form_submit(){
$('form').submit(function (ev, picker) {
[startDate, endDate] = $('.date_range').val().split(' - ');
$(this).find('input[name="datemin"]').val(startDate);
$(this).find('input[name="datemax"]').val(endDate);
});
}
$("input.date_range").change(function() {
console.log($("input.date_range").val());
$('form').trigger('submit');
});
}
);
以上不工作
这也行不通。它提交但数据未传递到输入字段。
$('input.date_range').daterangepicker(
// Options
{
"alwaysShowCalendars": true,
"showDropdowns": true,
autoApply:true,
ranges: {
'Today': [moment(), moment()],
'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
'Last 7 Days': [moment().subtract(6, 'days'), moment()],
'Last 30 Days': [moment().subtract(29, 'days'), moment()],
'This Month': [moment().startOf('month'), moment().endOf('month')],
'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')]
}
},
// Callback
function(start, end){ // start, end being the values of date range
$(this).find('input[name="datemin"]').val(start);
$(this).find('input[name="datemax"]').val(end);
$('form').delay(200).submit(); // You can remove the delay too
}
);
我想要实现的是以下而不点击提交。 https://jsfiddle.net/4mk3s5d6/1/
解决方案
我将在这里展示完整的代码。
HTML 代码:
<form method='post' id="dateForm">
<div id="reportrange">
<i class="fa fa-calendar"></i>
<span></span> <i class="fa fa-caret-down"></i>
<input type="submit" id='btn-form' style='display: none;'>
</div>
</form>
jQuery代码:
<script type="text/javascript">
$(function() {
var start = moment().subtract(1, 'days');
var end = moment();
function cb(start, end) {
$('#reportrange span').html(start.format('MMMM D, YYYY') + ' - ' + end.format('MMMM D, YYYY'));
}
$('#reportrange').daterangepicker({
startDate: start,
endDate: end,
ranges: {
'Today': [moment(), moment()],
'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
'Last 7 Days': [moment().subtract(6, 'days'), moment()],
'Last 30 Days': [moment().subtract(29, 'days'), moment()],
'This Month': [moment().startOf('month'), moment().endOf('month')],
'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')]
}},cb);
cb(start, end);
});
$('#reportrange').on('apply.daterangepicker', function(ev, picker) {
//do something, like clearing an input
$('#btn-form').click();
});
</script>
当您应用事件启用时,您可以简单地单击提交按钮。
推荐阅读
- sql - SQL在unnest中返回最大值
- sharepoint - PowerApps 中的 Sharepoint ID 搜索
- asp.net-mvc - 端点未找到 MVC
- jquery - jquery - 更改值,并重新读回第二个函数
- java - 我们可以将 Archetype 22 用于 AEM 版本 6.4.2 吗?
- c - 如何在 c 中使用带参数的函数指针?
- python - 如果某些单词包含空格,则python正则表达式
- firebase - 如何渲染依赖 firebase 异步函数的组件?
- reactjs - antDesign中的select标签样式
- sql - SQL 查询仅在特定时间段内选择所有在职员工和终止员工