Tabulator 中的日期时间选择器?
datetime picker in Tabulator?
我想在 Tabulator.js 中使用纯 javascript 日期时间选择器。通常我使用 Materializecss 但他们不提供日期时间选择器。只有日期或时间。所以我必须找到一个。我选择了 rome although I liked better dtsel - 它有更好的时间选择器,但我还没有找到它的 cdn。
我发现Tabulator提供了一种实现customer editors. In my code (see jsFiddle)的方法,就是editor:dateEditorOriginal
函数。它运行良好,甚至提供内置日历。谁能告诉日历是从哪里来的?制表符还是时刻?
但我需要日期时间,所以请查看 var dateEditor
。我尝试使用罗马选择器,但我无法使其工作。我可以 select 日期和时间,但不会将其传递给 Tabulator。
var dateEditor = function(cell, onRendered, success, cancel, editorParams){
//cell - the cell component for the editable cell
//onRendered - function to call when the editor has been rendered
//success - function to call to pass the successfuly updated value to Tabulator
//cancel - function to call to abort the edit and return to a normal cell
//editorParams - params object passed into the editorParams column definition property
//create and style editor
var editor = document.createElement("input");
//var cellValue = cell.getValue()
var cellValue = moment(cell.getValue(), "DD-MM-YYYY HH:mm").format("DD-MM-YYYY HH:mm")
// editor.setAttribute("type", "date");
var cal
//create and style input
editor.style.padding = "3px";
editor.style.width = "100%";
editor.style.boxSizing = "border-box";
//Set value of editor to the current value of the cell
// editor.value = moment(cell.getValue(), "YYYY-MM-DD HH:mm").format("YYYY-MM-DD HH:mm")
//editor.value = cellValue
//set focus on the select box when the editor is selected (timeout allows for editor to be added to DOM)
onRendered(function(){
//console.log(cellValue)
cal = rome(editor,{
"inputFormat": "DD-MM-YYYY HH:mm",
"initialValue": cellValue,
"timeInterval": 600,
"weekStart": 1
})
// editor.focus();
// editor.style.css = "100%";
});
//when the value has been set, trigger the cell to update
function successFunc(){
var tmp = editor.value
console.log(cal.getDate())
console.log(tmp)
console.log(cell.getValue())
// success(tmp)
// success(moment(editor.value, "DD-MM-YYYY HH:mm").format("DD-MM-YYYY HH:mm"));
}
editor.addEventListener("change", successFunc);
editor.addEventListener("blur", successFunc);
//return the editor element
return editor;
};
有人可以帮我在 Tabulator 中实现纯 javascript 日期时间选择器吗?
这里是jsFiddle。 From 列使用我的日期时间选择器实现,To 列使用原始 dateEditor。
我面临的问题是,当前设置正确的日期是 selected,传递到输入字段而不是制表符。如果我是正确的,这就是我的解释。一旦日期和时间 selection 完成,我希望它在 Tabulator 中看到它。
您必须调用 success() 来更新 Tabulator。
出于某种原因(我花了太多时间但没有得到答案),您示例中的 success() 不喜欢用现有的单元格值调用?
所以我补充说:
(cell.getValue() != cal.getDateString()) && success(cal.getDateString());
它也不喜欢你的第二行没有时间码,所以使用时间选择器的第一个选择被忽略,并将其设置为 00:00,然后是第二个(和进一步的应用程序)按预期进行。
我想解决这些其他问题取决于您,因为我不使用 rome。
我只是使用内置的
如果您不必使用 Rome,我建议您使用 flatpickr。
var dateEditor = (cell, onRendered, success, cancel, editorParams) => {
var editor = document.createElement("input");
editor.value = cell.getValue();
var datepicker = flatpickr(editor, {
enableTime: true,
dateFormat: "j-n-Y H:i",
onClose: (selectedDates, dateStr, instance) => {
success(dateStr);
instance.destroy();
},
});
onRendered(() => {
editor.focus();
});
return editor;
};
这是一个例子:
https://jsfiddle.net/fazLh6v0/
你的问题是模糊事件(你用它来捕捉用户的完成)当用户点击日历时已经触发 - 所以在他的选择被处理之前。
我能找到的唯一解决方案是使用另一个框架。
以flatpickr(它也有时间特性,看起来更漂亮)为例,你可以定义一个触发成功函数的关闭事件。
(就像蒂姆的解决方案一样)
我想在 Tabulator.js 中使用纯 javascript 日期时间选择器。通常我使用 Materializecss 但他们不提供日期时间选择器。只有日期或时间。所以我必须找到一个。我选择了 rome although I liked better dtsel - 它有更好的时间选择器,但我还没有找到它的 cdn。
我发现Tabulator提供了一种实现customer editors. In my code (see jsFiddle)的方法,就是editor:dateEditorOriginal
函数。它运行良好,甚至提供内置日历。谁能告诉日历是从哪里来的?制表符还是时刻?
但我需要日期时间,所以请查看 var dateEditor
。我尝试使用罗马选择器,但我无法使其工作。我可以 select 日期和时间,但不会将其传递给 Tabulator。
var dateEditor = function(cell, onRendered, success, cancel, editorParams){
//cell - the cell component for the editable cell
//onRendered - function to call when the editor has been rendered
//success - function to call to pass the successfuly updated value to Tabulator
//cancel - function to call to abort the edit and return to a normal cell
//editorParams - params object passed into the editorParams column definition property
//create and style editor
var editor = document.createElement("input");
//var cellValue = cell.getValue()
var cellValue = moment(cell.getValue(), "DD-MM-YYYY HH:mm").format("DD-MM-YYYY HH:mm")
// editor.setAttribute("type", "date");
var cal
//create and style input
editor.style.padding = "3px";
editor.style.width = "100%";
editor.style.boxSizing = "border-box";
//Set value of editor to the current value of the cell
// editor.value = moment(cell.getValue(), "YYYY-MM-DD HH:mm").format("YYYY-MM-DD HH:mm")
//editor.value = cellValue
//set focus on the select box when the editor is selected (timeout allows for editor to be added to DOM)
onRendered(function(){
//console.log(cellValue)
cal = rome(editor,{
"inputFormat": "DD-MM-YYYY HH:mm",
"initialValue": cellValue,
"timeInterval": 600,
"weekStart": 1
})
// editor.focus();
// editor.style.css = "100%";
});
//when the value has been set, trigger the cell to update
function successFunc(){
var tmp = editor.value
console.log(cal.getDate())
console.log(tmp)
console.log(cell.getValue())
// success(tmp)
// success(moment(editor.value, "DD-MM-YYYY HH:mm").format("DD-MM-YYYY HH:mm"));
}
editor.addEventListener("change", successFunc);
editor.addEventListener("blur", successFunc);
//return the editor element
return editor;
};
有人可以帮我在 Tabulator 中实现纯 javascript 日期时间选择器吗?
这里是jsFiddle。 From 列使用我的日期时间选择器实现,To 列使用原始 dateEditor。
我面临的问题是,当前设置正确的日期是 selected,传递到输入字段而不是制表符。如果我是正确的,这就是我的解释。一旦日期和时间 selection 完成,我希望它在 Tabulator 中看到它。
您必须调用 success() 来更新 Tabulator。
出于某种原因(我花了太多时间但没有得到答案),您示例中的 success() 不喜欢用现有的单元格值调用?
所以我补充说:
(cell.getValue() != cal.getDateString()) && success(cal.getDateString());
它也不喜欢你的第二行没有时间码,所以使用时间选择器的第一个选择被忽略,并将其设置为 00:00,然后是第二个(和进一步的应用程序)按预期进行。
我想解决这些其他问题取决于您,因为我不使用 rome。 我只是使用内置的
如果您不必使用 Rome,我建议您使用 flatpickr。
var dateEditor = (cell, onRendered, success, cancel, editorParams) => {
var editor = document.createElement("input");
editor.value = cell.getValue();
var datepicker = flatpickr(editor, {
enableTime: true,
dateFormat: "j-n-Y H:i",
onClose: (selectedDates, dateStr, instance) => {
success(dateStr);
instance.destroy();
},
});
onRendered(() => {
editor.focus();
});
return editor;
};
这是一个例子: https://jsfiddle.net/fazLh6v0/
你的问题是模糊事件(你用它来捕捉用户的完成)当用户点击日历时已经触发 - 所以在他的选择被处理之前。
我能找到的唯一解决方案是使用另一个框架。 以flatpickr(它也有时间特性,看起来更漂亮)为例,你可以定义一个触发成功函数的关闭事件。
(就像蒂姆的解决方案一样)