如何在甜蜜警报中使用日期时间选择器?

Posted

技术标签:

【中文标题】如何在甜蜜警报中使用日期时间选择器?【英文标题】:How to use date time picker in sweet alert? 【发布时间】:2018-09-25 19:38:03 【问题描述】:

这是我正在处理的代码

   swal(
                title: "Confirm details?",
                text:'<input id="datetimepicker" class="form-control" autofocus>',
                type: "warning",
                customClass: 'swal-custom-width',
                html:true,
                showCancelButton: true,
                confirmButtonClass: "btn-success",
                confirmButtonText: "Confirm",
                cancelButtonText: "Cancel",
                closeOnConfirm: false,
                closeOnCancel: false,
                showLoaderOnConfirm: true
            ,

我想在甜蜜警报中的输入中设置日期时间选择器。

$('#datetimepicker').datetimepicker(
    format: 'DD/MM/YYYY hh:mm A',
    defaultDate: new Date()
);

当我单击甜蜜警报时,输入字段无法单击或对其执行任何操作。日期也没有出现。任何人都可以告诉我有什么问题吗?谢谢。

单击输入选择日期时控制台错误

Uncaught RangeError: Maximum call stack size exceeded.
at HTMLDivElement.trigger (jquery-2.2.3.min.js:3)
at Object.trigger (jquery-2.2.3.min.js:4)
at HTMLDivElement.<anonymous> (jquery-2.2.3.min.js:4)
at Function.each (jquery-2.2.3.min.js:2)
at n.fn.init.each (jquery-2.2.3.min.js:2)
at n.fn.init.trigger (jquery-2.2.3.min.js:4)
at c.<anonymous> (bootstrap.min.js:6)
at HTMLDocument.f (jquery-2.2.3.min.js:2)
at HTMLDocument.dispatch (jquery-2.2.3.min.js:3)
at HTMLDocument.r.handle (jquery-2.2.3.min.js:3)

【问题讨论】:

而您正试图在text: 字段中添加html,我不确定甜蜜警报1 是否支持text 上的HTML 标记 sweet alert 1 将内容转成文本并允许 html by html:true 哦,那好吧。 :+1: 【参考方案1】:

使用onOpen监听器触发datetimepicker

onOpen: function() 
      $('#datetimepicker').datetimepicker(
         format: 'DD/MM/YYYY hh:mm A',
         defaultDate: new Date()
  );
,

在你的情况下是这样的:

 swal(
    title: "Confirm details?",
    html:'<input id="datetimepicker" class="form-control" autofocus>',
    type: "warning",
    onOpen: function() 
        $('#datetimepicker').datetimepicker(
            format: 'DD/MM/YYYY hh:mm A',
            defaultDate: new Date()
        );
    

参考:https://sweetalert2.github.io/

【讨论】:

我试过了,但没用。我使用的是 sweetalert 而不是 sweetalert2。 是的,我正在使用这个。 这个版本不支持,这类监听器,要么你必须迁移到 swal2 要么使用这个自定义脚本为 swal1 添加对 OnOpen 的支持jsfiddle.net/w8guq08p/5 我试过了,但也不起作用,输入字段也无法点击。对于 onOpen 功能,我只是添加了警报,但单击我的按钮时也没有显示任何内容。 与其浪费时间让 swal 工作,我建议你迁移到sweetalert2.github.io,它有很多功能和更多的可定制性。我希望这不是一个巨大的迁移,只是核心 CSS 和 js 文件替换。【参考方案2】:

感谢Thamaraiselvam。 这是我的方式,使用 SweetAlert2 和 JqueryUI DatePicker:

Swal.fire(
  title: 'pick a date:',
  type: 'question',
  html: '<input id="datepicker" readonly class="swal2-input">',
  customClass: 'swal2-overflow',
  onOpen:function()
	$('#datepicker').datepicker(
		dateFormat: 'yy/mm/dd'
	);
  
).then(function(result) 
	if(result.value)
		alert(	$('#datepicker').val()	);
	
);
.swal2-overflow 
  overflow-x: visible;
  overflow-y: visible;
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@8.2.6/dist/sweetalert2.all.min.js" integrity="sha256-Ry2q7Rf2s2TWPC2ddAg7eLmm7Am6S52743VTZRx9ENw=" crossorigin="anonymous"></script>
<link rel="stylesheet" href="https://code.jquery.com/ui/1.12.1/themes/start/jquery-ui.css"/>

【讨论】:

以上是关于如何在甜蜜警报中使用日期时间选择器?的主要内容,如果未能解决你的问题,请参考以下文章

如何在每次打开日期范围选择器对话框时显示警报?

如何限制用户从日期选择器中选择过去的日期?

我如何将当前日期与日期选择器中的用户输入日期进行比较

在特定时间间隔重复警报

无法在警报管理器中设置日历日期

更改日期格式以使用数据库进行验证