javascript - JsGrid 无法强制更新值

标签 javascript jquery jsgrid

我试图在编辑时将格式值强制到“导入”列中。它应该是一个字符串,表示具有 2 个固定十进制数字的数字。示例:1152.30。这是代码。

HTML

<div id="grid"></div>

JS代码

const ACCOUNT_GRID_FIELD_NAME = "account";
const IMPORT_GRID_FIELD_NAME = "import";

$("#grid").jsGrid(createGridConfiguration());

function createGridConfiguration() {
  let result;

  result = {
    inserting: false,
    editing: true,
    sorting: false,
    paging: false,

    data: [],

    onItemInserting: onGridItemInserting,
    onItemUpdating: onGridItemUpdating,

    fields: [{
      name: ACCOUNT_GRID_FIELD_NAME,
      title: "Account",
      type: "text",
      width: 300,
    }, {
      name: IMPORT_GRID_FIELD_NAME,
      title: "Import",
      type: "text",
      width: 200,
    }, {
      type: "control",
      width: 150,
      editButton: true,
      modeSwitchButton: false,
      headerTemplate: onRenderAddRowHeadder,
    }]
  }

  return result;
}

function onGridItemInserting(args) {
  let validAmount;

  validAmount = formatAmountForOutput(0);
  args.item[IMPORT_GRID_FIELD_NAME] = validAmount;
}

function onGridItemUpdating(args) {
  let validAmount, previousAmount;

  previousAmount = args.item[IMPORT_GRID_FIELD_NAME];
  validAmount = formatAmountForOutput(previousAmount);
  args.item[IMPORT_GRID_FIELD_NAME] = validAmount; // Here we have the correct value
}

function formatAmountForOutput(amount) {
  let result, valueAsNumber;

  if (amount === undefined) {
    valueAsNumber = 0;
  } else {
    valueAsNumber = parseFloat(amount);
    if (isNaN(valueAsNumber)) {
      valueAsNumber = 0;
    }
  }

  result = valueAsNumber.toFixed(2);

  return result;
}

function onRenderAddRowHeadder() {
  let result;

  result = $("<input>");
  result.addClass("jsgrid-button jsgrid-insert-button")
  result.attr("type", "button");
  result.on("click", onGridInsertItemClick);

  return result;
}

function onGridInsertItemClick() {
  let grid;

  grid = $("#grid");
  grid.jsGrid("insertItem");
}

<强> JsFiddle

当我单击插入时,它会触发 onGridItemInserting,因此它会插入正确的值,但是当我尝试在编辑时使用相同的技术时,如果触发 onGridItemUpdating,并生成正确的值(查看注释行),但网格(及其内部的数据)以错误的值结束。

示例:我单击“插入”,然后出现“0.00”。那是对的。现在我点击“0.00”,并修改它,所以我写“120.1234”。当我点击确认时,我期望变成“120.12”,但它存储并显示“120.1234”。

我怎样才能强制获得所需的值?

最佳答案

Its fixed here: http://jsfiddle.net/rn30w2r0/

我在文档中看到编辑后必须刷新网格,请查看 jsGrid github。使用 $("#grid").jsGrid("refresh"); GitHub

您在另一台上设置了错误的数据

args.item[IMPORT_GRID_FIELD_NAME] = validAmount;

谢谢

关于javascript - JsGrid 无法强制更新值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48680272/

相关文章:

javascript - Fancybox V2 fit content width iframe

Javascript json eval() 注入(inject)

Javascript 期权和单选值(value)价格计算

javascript - 如何使用基于 token 的身份验证从 ExtJS 调用 Web API

javascript - 发生滚动后,如何使 div(菜单)固定位置?

javascript - 将连续日期添加到 li ul

javascript - jquery 中是否有类似 indexof() 的方法?或者怎么做?

c# - 为特定行禁用 jsgrid 的编辑和删除按钮

javascript - 如何在 React 中加载和使用 jsgrid lib?

javascript - 如果无法在 loadData() Controller 中使用 AJAX,如何更新 jsGrid 中的数据? (数组尚未完成填充)