由于某种原因,下拉菜单中有以下返回NAN/NAN/NAN的代码。不知道是什么引起的。堆栈溢出代码片段中的代码由于某种原因不能正常工作,,但我在JSFiddle在这里中有相同的代码,这将显示我试图解释的内容。其显示方式如下:
1)由于A有两个与其相关的日期,因此单元格应该在下拉列表( 1481198400000 )中显示第一个日期(它显示得很好),然后显示第二个日期。
2)同样,B应该在下拉菜单中显示1497348000000和1487764800000。
但是,正如在JSFiddle中所示,我得到了这样的结果(下面的截图):

var data = [{
name: 'A',
date: '1481198400000'
}, {
name: 'A',
date: '1481198400000'
}, {
name: 'B',
date: '1552557600000'
}, {
name: 'B',
date: '1497348000000'
}, {
name: 'B',
date: '1487764800000'
}, {
name: 'C',
date: '1491818400000'
}, {
name: 'D',
date: '1491818400000'
}, {
name: 'E',
date: '1552384800000'
}];
var cl = function(s) {
console.log(s);
}
var isUsedKey = function(arrayOfObject, key) {
for (var i = 0; i < arrayOfObject.length; i += 1) {
if (arrayOfObject[i].key == key) {
return true;
}
}
return false;
};
var array = [];
var object = {};
for (var i = 0; i < data.length; i++) {
if (i == 0) {
var newItem = {};
newItem.key = data[i].name;
newItem.dates = [data[i].date];
array.push(newItem);
} else {
var item = data[i];
var itemName = item.name;
var itemDate = item.date;
if (isUsedKey(array, itemName)) {
for (var j = 0; j < array.length; j++) {
if (array[j].key == itemName) {
var index = array[j].dates.length;
array[j].dates[index] = itemDate;
}
}
} else {
var nextNewItem = {};
nextNewItem.key = itemName;
nextNewItem.dates = [itemDate];
array.push(nextNewItem);
}
}
}
var newSource = {
localdata: array,
datafields: [{
name: 'name',
type: 'string',
map: 'key'
}, {
name: 'date',
type: 'date',
map: 'dates>0',
// format: 'dd.MM.yyyy'
format: 'MM/dd/yyyy'
}],
datatype: "array"
};
var newAdapter = new $.jqx.dataAdapter(newSource);
console.log(newAdapter);
// Adding for dropdown icon
var iconrenderer = function(row, columnfield, value, defaulthtml, columnproperties) {
return '<span style="position: relative; width: 100%; margin: 4px; float: ' + columnproperties.cellsalign + ';">' + newAdapter.formatDate(value, 'd') + '<img src="https://www.jqwidgets.com/public/jqwidgets/styles/images/icon-down.png" style="position: absolute; right: 5px;" /></span>';
}
$("#jqxgrid").jqxGrid({
source: newAdapter,
editable: true,
columns: [{
text: 'Name',
datafield: 'name',
editable: false,
width: 100,
height: 100
}, {
text: 'Date',
datafield: 'date',
cellsformat: 'd',
columntype: 'combobox',
width: 200,
height: 200,
cellsrenderer: iconrenderer,
createeditor: function(row, column, editor) {
var info = $('#jqxgrid').jqxGrid('getrowdata', row);
var groupName = info.name;
var dates = [];
for (var i = 0; i < array.length; i++) {
if (array[i].key == groupName) {
dates = array[i].dates;
}
}
editor.jqxComboBox({
autoDropDownHeight: true,
source: dates,
promptText: "Please Choose:"
});
},
initeditor: function(row, column, editor) {
var info = $('#jqxgrid').jqxGrid('getrowdata', row);
var groupName = info.name;
var dates = [];
for (var i = 0; i < array.length; i++) {
if (array[i].key == groupName) {
dates = array[i].dates;
}
}
editor.jqxComboBox({
autoDropDownHeight: true,
source: dates,
promptText: "Previous Dates:",
renderer: function(index_, label_, value_) {
var formattedDate = "";
//if (!isEmpty(value_)) {
var dateObject = new Date(value_);
formattedDate = (dateObject.getMonth() + 1) + "/" + dateObject.getDate() + "/" + dateObject.getFullYear();
//}
return formattedDate;
},
renderSelectedItem: function(index, item) {
var records = editor.jqxComboBox('getItems');
var currentRecord = records[index].label;
var formattedDate = "";
//if (!isEmpty(value_)) {
var dateObject = new Date(currentRecord);
formattedDate = (dateObject.getMonth() + 1) + "/" + dateObject.getDate() + "/" + dateObject.getFullYear();
//}
return formattedDate;
}
});
},
cellvaluechanging: function(row, column, columntype, oldvalue, newvalue) {
// return the old value, if the new value is empty.
if (newvalue == "") return oldvalue;
},
}],
});body {
width: 100%;
height: 100%;
}<script src="https://www.jqwidgets.com/jquery-widgets-demo/demos/jqxgrid/generatedata.js"></script>
<script src="https://www.jqwidgets.com/public/jqwidgets/jqx-all.js"></script>
<link href="https://www.jqwidgets.com/public/jqwidgets/styles/jqx.arctic.css" rel="stylesheet" />
<link href="https://www.jqwidgets.com/public/jqwidgets/styles/jqx.base.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<div id='jqxWidget'>
<div id="jqxgrid"></div>
</div>
发布于 2019-03-19 14:45:16
问题在于,当要将value_作为一个字符串提供给Date()构造函数时,要将其解释为一个划时代的时间戳,该值需要是一个整数。因此,您可以使用parseInt()
var dateObject = new Date(parseInt(value_, 10));https://stackoverflow.com/questions/55243566
复制相似问题