首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >下拉项的日期显示为NAN,但单元格的日期为

下拉项的日期显示为NAN,但单元格的日期为
EN

Stack Overflow用户
提问于 2019-03-19 14:39:11
回答 1查看 50关注 0票数 1

由于某种原因,下拉菜单中有以下返回NAN/NAN/NAN的代码。不知道是什么引起的。堆栈溢出代码片段中的代码由于某种原因不能正常工作,,但我在JSFiddle在这里中有相同的代码,这将显示我试图解释的内容。其显示方式如下:

1)由于A有两个与其相关的日期,因此单元格应该在下拉列表( 1481198400000 )中显示第一个日期(它显示得很好),然后显示第二个日期。

2)同样,B应该在下拉菜单中显示14973480000001487764800000

但是,正如在JSFiddle中所示,我得到了这样的结果(下面的截图):

代码语言:javascript
复制
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;
    },

  }],
});
代码语言:javascript
复制
body {
  width: 100%;
  height: 100%;
}
代码语言:javascript
复制
<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>

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-19 14:45:16

问题在于,当要将value_作为一个字符串提供给Date()构造函数时,要将其解释为一个划时代的时间戳,该值需要是一个整数。因此,您可以使用parseInt()

代码语言:javascript
复制
var dateObject = new Date(parseInt(value_, 10));

更新小提琴

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55243566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档