jqgrid - 添加新行并禁用restoreRow功能

2024-02-03

如果我要添加新行并且启用自动编辑新添加的行,那么我想执行验证并通过 ENTER 按钮保存行,但我不想通过 ESC 按钮恢复行。因为我设置了required: true按所有字段,如果新添加的行将至少有一个字段为空,则按 ESC 按钮(restoreRow)导致我的数据不一致,因为不会执行验证并且新添加的行将具有空字段。虽然我设定了required: true.

问题是,添加新行后,我总是想在保存之前验证编辑的行,但 ESC 按钮会导致恢复行。对于 doubliClick 的正常编辑原因,我想使用 ESC 来恢复行,使用 ENTER 来保存行。

我的代码是从coffescript生成的

$("#add-row").click((function(_this) {
  return function(e) {
    e.preventDefault();
    return _this.saveEditingRow(function() {
      var dataIds;
      _this.table.jqGrid("addRowData", void 0, "last");
      dataIds = _this.table.jqGrid("getDataIDs");
      if (dataIds.length > 0) {
        return _this.table.jqGrid("editRow", dataIds[dataIds.length - 1], {
          keys: true,
          url: "clientArray",
          aftersavefunc: function(rowId) {
            return retypeColumnValues.call(table, rowId);
          }
        });
      }
    });
  };
})(this));


Table.prototype.saveEditingRow = function(successfunc, errorfunc) {
    var i, result, savedRows, success, _i, _ref;
    savedRows = this.table.jqGrid("getGridParam", "savedRow");
    success = true;
    for (i = _i = 0, _ref = savedRows.length; _i < _ref; i = _i += 1) {
      if (savedRows.length > 0) {
        result = this.table.jqGrid("saveRow", savedRows[i].id, {
          url: "clientArray"
        });
        if (!result && success) {
          success = false;
        }
      }
    }
    if (success) {
      return typeof successfunc === "function" ? successfunc() : void 0;
    } else {
      return typeof errorfunc === "function" ? errorfunc() : void 0;
    }
};

如果有必要,我会将所有代码填充到coffeescript中。


I agree that it's a problem because the option keys: true register keydown event handler which process both Enter and Esc. You can't just inform jqGrid to process Enter, but don't process Esc.

如果你不打电话restoreRow在你的代码中,那么你可能可以通过使用来解决你的问题beforeCancelRow您可以在其中定义回调$.jgrid.inlineEdit.

$.extend(true, $.jgrid.inlineEdit, {
    beforeCancelRow: function () { // the parameters options and rowid can be used
        return false;
    }
});

上面的代码将不允许restoreRow根本不。您可以通过包含一些验证来修改代码。

您还有一个选择:不使用keys: true,但是注册你自己的keydown所有处理程序<input> and <select>编辑行中的字段。你可以在以下位置执行此操作oneditfunc打回来。看源代码 https://github.com/tonytomov/jqGrid/blob/v4.7.0/js/grid.inlinedit.js#L112-L134 of keydownjqGrid 使用的处理程序。你只需要打电话saveRow的情况下e.keyCode === 13。所需rowid您可以从外部范围获取(如果您在oneditfunc)或从e.target: $(e.target).closest("tr.jqgrow").attr("id").

另一种选择:您可以添加一些类,例如jqgrid-new-row(这是使用的类addRow http://www.trirand.com/jqgridwiki/doku.php?id=wiki:inline_editing#addrow方法)到行(<tr>) 调用后直接addRowData ($("#" + dataIds[dataIds.length - 1]).addClass("jqgrid-new-row"))。你应该添加afterrestorefunc回调到editRow你称之为。里面的afterrestorefunc你可以测试该行是否有jqgrid-new-row上课和通话delRowData排在案件中。顺便说一句,如果你添加课程jqgrid-new-row名称(或使用addRow代替addRowData)然后删除取消的行将自动完成restoreRow (see 代码片段 https://github.com/tonytomov/jqGrid/blob/v4.7.0/js/grid.inlinedit.js#L422-L427).

您甚至可以无条件地执行此操作,无需对类进行任何测试jqgrid-new-row如果上面的代码有效only如果编辑新添加的行。所以调用editRow可能像下面这样

return _this.table.jqGrid("editRow", dataIds[dataIds.length - 1], {
    keys: true,
    url: "clientArray",
    aftersavefunc: function(rowId) {
        return retypeColumnValues.call(table, rowId);
    },
    afterrestorefunc: function(rowId) {
        _this.table.jqGrid("delRowData", rowId); // delete after cancel editing
    }
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

jqgrid - 添加新行并禁用restoreRow功能 的相关文章

  • struts2 中的 JQuery Grid - 初学者

    我对 struts2 和 JQuery 编程很陌生 在我的应用程序中 当调用 loginAction 时 如果用户是管理员 我会将他们定向到 AdminLoadAction 此操作加载 adminHome jsp 我需要的是 adminHo
  • jqgrid 更改单元格值并保持编辑模式

    我在网格中使用内联编辑 在某些情况下我想更改列内单元格的值 我用 setCell 更改它 效果很好 我的问题是 更改后 单元格失去了编辑模式 而该行的所有其他单元格都处于编辑模式 我想在更改单元格后将其保持在编辑模式 现在我所做的是保存该行
  • 如何将 jqGrid (4.x) 配置为 TreeView

    我已经获取了演示代码并尝试修改它以满足我的需要 但不幸的是我无法获得所需的结果 树网格正在加载和 绑定 但在展开和折叠期间层次结构似乎存在问题 我希望它默认保持展开状态 看起来它正在对它应该的数据发出另一个 ajax 请求不要做 第一次调用
  • 如何调用重置选择并选择jqGrid中的所有内容?

    如何重置所选行并在单击外部按钮时选择所有行 我正在尝试重置选择 但不起作用 jQuery selectAll click function jQuery cbox trigger click jQuery clear click funct
  • jqGrid 传递值到表单编辑

    我有一个 jqGrid 字段 如下所示 colModel name Enabled index Enabled width 45 editable true edittype checkbox editoptions value 1 0 f
  • 根据 JQGRID 中的条件编辑行

    在 JQGRID 中使用表单编辑 我用不同的颜色显示行 红色 无法编辑行 黑色 可以编辑行 1 Option 当用户单击编辑按钮并且所选行为红色时 应显示消息记录 无法编辑 2 选项 如果用户选择了黑色标记的可编辑行 用户可以编辑该行 但是
  • jqGrid treeGrid 捕获展开折叠事件

    我使用 jqGrid 来构建一些大树 现在我想记住cookie中展开和折叠的节点 所以我想捕捉展开和折叠事件 我在手册中找不到它 所以我用这种方式解决了 grid find div treeclick bind click function
  • 循环动态展开子网格 - JQGrid

    我有一个带有使用 subGridRowExpanded 的子网格的网格 我想动态扩展网格的一些行 所以我写了以下内容 在第一个网格的 GridComplete 事件中 ids 是我的网格的行 id 数组 for int i 0 i lt i
  • 当 contentType=application/json 时 Jquery JQGrid 中断?

    我必须使用 ajaxSetup 将 contentType 全局更改为 application json ajaxSetup contentType application json charset utf 8 请参阅此问题了解为什么我必须
  • 是否应该将jqGrid的addJSONData用法替换为setGridParam()和trigger('reloadGrid')的用法?

    我最近写了一个问题的答案 jqGrid 在更新表 自定义更新时显示默认 正在加载 消息 https stackoverflow com questions 2614643 jqgrid display default loading mes
  • 如何将数据动态分配给jqGrid?

    这是我创建 jqGrid 的代码 ptDataGrid jqGrid datatype local data arrSpecData colModel colmod rowNum 10 rowList 10 pager ptPager gr
  • 使用 jqGrid 的 ASP.NET MVC 路由

    我正在尝试创建一个指向 url 的链接 例如首页 详情 1在 jqGrid 列中 文档显示 showlink baseLinkUrl showAction show addParam key 2 注意 addParam 应该包含 例如 格式
  • 为什么使用 gridview:true 以及它的含义是什么?

    我正在 JqGrid 上工作 我想知道如果我们指定的话意味着什么gridview true 以及什么情况下我们需要提供 我最近正在开发一个这样的 jqGrid 和我的afterInsertRow没有被调用 一旦我删除了gridview tr
  • jqgrid editoptions:必需的不起作用

    好吧 不确定我在这里做错了什么 list jqGrid url URL datatype json mtype GET colModel label Index index Index key true hidden true label
  • 在jqGrid中查找当前页码

    如何在 jqGrid 中找到当前页码 当然使用 jQuery 另外我怎么知道总共有多少页 这应该可以做到 sp 1 text total pages ui pg input val current page Edit 我发现了一个更好的方法
  • JQGrid 列自定义..在运行时添加列

    我是 J Query 的新手 正在尝试一些示例http www trirand com blog jqgrid jqgrid html http www trirand com blog jqgrid jqgrid html我看到列名是用
  • 添加后对话框未关闭

    下面是我的代码 我需要在提交后关闭添加 编辑对话框 在这两种情况下 它都会更新服务器并重新加载网格 但不会关闭对话框 jQuery toolbar1 jqGrid url category getcategorylist datatype
  • 如何使tinyMCE编辑器在首次初始化后保留在我的jQgrid textarea formit表单中?

    我有一个 jqgrid 我试图在文本区域中使用tinyMCE 在我的数据库中发送 存储 html 并重新加载到我的网格中 我有一个带有tinyMCE的自定义列作为文本区域 但是在我打开editform一次并在下次打开时关闭它之后 tinym
  • 连续 GridUnload createGrid 不起作用

    任何想法为什么多次调用执行以下操作的函数 grid jqGrid GridUnload createGrid 只会每隔一段时间创建一次网格 但是 每次调用时 以下内容都会起作用 grid jqGrid GridUnload setTimeo
  • JQGrid 以编程方式选择网格行

    我有一个带有 loadonce true 的 JQGrid 所以它都是客户端 并启用了分页 比如说 20 页 我想指定一行 以编程方式 无需用户输入 并让我的网格导航到相应的页面以选择指定的行 当前的 JQGrid 可以吗 我研究了搜索和过

随机推荐

  • WPF 从 DataTrigger 设置 Image.Source

    我正在尝试定义一个DataTrigger for an Image元素 以便显示连接 断开连接的图像 我不断收到Invalid PropertyDescriptor信息 有任何想法吗
  • 根据方法名称过滤 log4net - 不太明白

    我使用 log4net 来记录我的 Web 应用程序的进度 使用 Log4PostSharp 来 AOP 注入所有方法 这达到了记录 几乎 所有内容的预期效果 并且很好 我现在需要将 Page Load 方法记录到文件 控制台 显然 我可以
  • 如何在 Silverlight 中序列化派生类

    我在 XAML 中创建了一个自定义控件 并添加了一些自定义属性 现在 如果可能的话 我想将其序列化为 JSON 这是 基本上 我所拥有的 public partial class MyCustomClass UserControl publ
  • Ninject MVC3 - 引导程序抛出“已初始化”异常

    我创建了一个空的 Asp Net MVC3 项目 并使用 nugetinstall package Ninject MVC3 无需执行任何其他操作 没有注册服务 甚至没有创建控制器 我就运行该应用程序 该项目在 NinjectMVC3 cs
  • 在 ASP.NET MVC 中组合和缩小 JS 和 CSS

    我创建了默认的 ASP NET MVC 3 Web 应用程序 然后我将三个 css 和三个 js 文件添加到 Views Shared Layout cshtml 视图中 Content Site css rel stylesheet ty
  • Google 地图 API 找不到 $(document).ready 中定义的回调

    我在使用 Jquery 和 Google 地图 API 时遇到问题 脚本似乎在 html 中正确定位
  • 在 R 中,如何访问因子每个级别的第一个元素?

    我有一个像这样的数据框 n c 2 2 3 3 4 4 n lt as factor n s c a b c d e f df data frame n s df n s 1 2 a 2 2 b 3 3 c 4 3 d 5 4 e 6 4
  • CSS 文件被阻止:MIME 类型不匹配(X-Content-Type-Options:nosniff)

    我正在开发一个 Angular 4 应用程序 我想应用一些全局样式 继角度站点的教程 https angular io tutorial toh pt5 global application styles 我在应用程序的根目录中创建了一个
  • Excel 2007 条件格式有 2 个条件,一个基于另一列

    我正在使用 Excel 2007 中的表格 我试图根据一列中的值及其状态 位于另一列中 以一种格式突出显示单元格 例如 我试图突出显示毛利润为负且状态为 IN 的所有单元格 仅单元格 而不是行 这样做的正确方法是什么 我尝试过 if 语句
  • 无法设置二维数组的属性“0”

    谁能告诉我为什么下面的代码会出现此错误 未捕获的类型错误 无法设置未定义的属性 0 var vehicles get poll index php data vehicles function data var rows data find
  • Spark:如何在每个执行器中创建本地数据帧

    在spark scala中有一种方法可以创建执行器中的本地数据帧 例如 pyspark 中的 pandas 在mappartitions方法中 我想将迭代器转换为本地数据帧 如python中的pandas数据帧 以便可以使用数据帧功能 而不
  • 用插值颜色填充阿基米德螺线之间的区域 - Matplotlib

    我想绘制如图所示的各种螺旋 一个螺旋在其他螺旋内部 假设我有三个螺旋 S1 S2 和 S3 我想填充连续螺旋之间的区域 即 S1 和 S2 S2 和 S3 之间的区域 最后是 S3 和 S1 之间的区域 我尝试了多种方法来解决以下两个问题
  • 取消列出数据框中已列出的列

    我有一个包含多个级别的列表 我希望将数据级别转换为数据帧 其中变量 chr 折叠为单个字符串 myList lt list total reach list 4 data list list reach 2 chr list A B C n
  • HTML 5 音频 .play() 在移动设备上的延迟

    我刚刚使用 socket io 构建了一个实时应用程序 其中 主 用户可以在接收设备 桌面浏览器 移动浏览器 上触发声音 该主用户会看到声音文件列表 并且可以在声音文件上单击 播放 音频播放在浏览器上是即时的 然而 在移动设备上 会出现 0
  • 无法在ExtJs中发送参数Ajax

    我在 View Extjs 中有代码 这是代码 var storeTree Ext create Ext data TreeStore proxy type ajax method POST url data newoss get pake
  • 使用或不使用“new”关键字创建 Mongoose 模式?

    我在网上看到的大多数例子都是这样做的 var UserSchema new mongoose Schema name String age String 然而 最近我发现一本书做了上述 但没有 new 关键字 var UserSchema
  • WCF Rest ERR_CONNECTION_RESET 响应不大

    错误代码绝对是可怕的 ERR CONNECTION RESET 有很多原因 我在其他问题上发现的原因与大型 Web 服务调用的 MaxRequestLength 太小有关 不过 我返回的数据只有几 kB 所以这不是问题 这是我的界面代码 W
  • 如何将 prettier 配置添加到 eslint 配置中?

    请注意 我不希望在我的 JS 项目中使用分号 Youtube 视频 https www youtube com watch v KfVPVmORnL4 我尝试在 eslintrc cjs 文件中禁用它 但奇怪的是semi 0无法禁用丢失警告
  • 如何在新进程中运行函数?

    现在我处于进程的线程之一A 我需要创建新流程B在当前线程中 并在进程中运行B功能MyFunc 我该怎么做 我找到了如何从当前进程创建子进程 click http msdn microsoft com en us library window
  • jqgrid - 添加新行并禁用restoreRow功能

    如果我要添加新行并且启用自动编辑新添加的行 那么我想执行验证并通过 ENTER 按钮保存行 但我不想通过 ESC 按钮恢复行 因为我设置了required true按所有字段 如果新添加的行将至少有一个字段为空 则按 ESC 按钮 rest