【问题标题】:Jqgrid getting value that we entered and change the editable attribute of a formJqgrid 获取我们输入的值并更改表单的可编辑属性
【发布时间】:2013-05-07 05:03:12
【问题描述】:

对不起,伙计们,但我遇到了这两个问题。我希望你们能帮我解决这个问题。

这是我的代码的一部分

jQuery("#VWWMODULE").jqGrid(
{
url:'loadstatic.php?q=2&t=CORE_VW_WMODULE',
datatype: "json", 
mtype: "POST", 
colNames:['Id', 'From Range', 'To Range'],
colModel:
[
    {
        name:'id',
        index:'id',
        width:7,
        editable:true,
        edittype:'text',
        editrules:{required:true},
        editoptions:{maxlength:7, size:7},
        formoptions:{rowpos:1, elmprefix:'  '},
        key:true
    },
    {
        name:'rangefrom',
        index:'rangefrom',
        width:7,
        editable:true,
        edittype:'text',
        editrules:{required:true, number:true},
        editoptions:{maxlength:7, size:7},
        formoptions:{rowpos:6, elmprefix:'  '}
    },
    {
        name:'rangeto',
        index:'rangeto',
        width:7,
        editable:true,
        edittype:'text',
        editrules:{required:true, number:true, custom:true, custom_func:frtid},
        editoptions:{maxlength:7, size:7},
        formoptions:{rowpos:7,elmprefix:'  '}
    }
]
  1. 正如您在“rangeto”中看到的,我正在进行自定义验证。这个验证实际上很简单。它只需要检查我们输入的'rangeto'的值是否大于'rangefrom'的值。现在如何从“rangefrom”中获取值,以便将其与自定义验证函数中“rangeto”中的值进行比较?

  2. 我的第二个问题是关于索引“id”。它用作表的主键。所以在编辑模式下不应该改变它。我是说在添加模式下,用户可以随意输入。但是一旦他提交了,这个值就不能改变了。在编辑模式下,用户仍然可以看到“id”值,但他无法更改它,因为它是不可编辑的。这是怎么做到的?

编辑

好的,现在我遇到了另一个问题。这是一个简单的问题。

  1. 如何在添加模式下调用自定义验证函数?因为我的函数在编辑模式下不应该被调用时会给出错误消息

你们中的任何人都可以帮我解决我遇到的这 3 个问题吗?

编辑

解决了here的更多解释

【问题讨论】:

  • stackoverflow 的目标不是提供帮助论坛来解决您的所有问题。目标是分享常见问题和答案(常见问题的解决方案)。因为交换问题是邪恶的。此类问题可能会被错误索引,因此其他问题将无法找到解决方案。你应该在不同的问题中区分不同的问题。
  • 我建议您使用beforeCheckValues 回调,将id 字段设置为只读或隐藏在beforeShowForm 内部(参见the answerthe answer)。
  • 我很抱歉这件事。我只是想让它更简单,所以我不必创建新问题,因此不会真正浪费服务器中的一些空间。在我提出问题之前,我还对文档进行了一些研究,并且已经搜索了一些类似的问题,但要么无法得到正确的问题(正如你所说的错误索引),无法得到答案,或者我发现的问题在这种情况下相似但并不完全相同,我找到了有关内场编辑的答案,但它并不能真正解决我的问题。无论如何感谢您的回复和答案,我会检查出来

标签: jquery jqgrid


【解决方案1】:

我想,您现在的主要问题只是在编辑后更改网格中的id

首先,在所有问题中写下非常重要:您使用哪种编辑模式以及如果您从服务器加载数据 (datatype: "json") 是否使用loadonce: true

只能间接地假设您使用表单编辑模式,因为您在colModel 中使用了formoptions 选项。表单编辑有reloadAfterSubmit 选项(参见the documentation),默认值为true。这意味着jqGrid在成功提交一行编辑后重新加载网格的全部内容。该设置简化了与服务器的接口。如果你使用默认选项,那么你编辑id没有问题,编辑后数据的正确排序也没有问题。

如果你决定使用reloadAfterSubmit 选项,那么你必须做额外的工作。服务器应以id 的新值响应。 id 通常由数据库生成,以防数据库中保存数据。您必须实现 afterSubmit 回调,它应该从服务器响应中解码新的 id 并返回它。

如果您确实使用内联编辑并且需要更改id,那么我会将您转发至the answer。示例中的aftersavefunc 回调包含修改id 的代码。

更新:我看到 here 你在 trirand 论坛上提出了同样的问题。我想从托尼的回答中简短地评论一点。

每个“添加”或“编辑”表单都包含带有数据的表格(另一个表格包含可以在表格底部看到的按钮)。表格的前两行和最后一行大多是隐藏的,并且包含(或可以包含)有用的信息:

例如,最后一行包含带有id="id_g" 的输入字段。行存在事件您没有列id(就像在您的网格中一样)。所以$("#id_g").val() 包含编辑行的rowid。添加对话框包含字符串"_empty" 的地方。

更新 2:如果您需要在“添加和编辑”表单中显示 id 字段但将其设置为只读,则只需为 id 列使用 readonly: 'readonly' 属性(请参阅 here) .下一个问题:您应该使用recreateForm: true 属性添加和编辑表单。

我不建议您使用reloadAfterSubmit: true,但如果您确实需要使用该选项,您应该从服务器(来自 savewmodule.php)返回新添加行的 id 和您必须使用 afterSubmit 回调从服务器响应中获取新的 id 并以记录的方式返回它 (return [true, "", new_id];)。此外,您必须在保存行后设置网格“id”列的内容。你应该修改postdata参数afterSubmit回调的id属性。

【讨论】:

    猜你喜欢
    • 2012-08-23
    • 1970-01-01
    • 2011-07-11
    • 2013-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多