【问题标题】:Get the client side value of a grid cell containing a <select>获取包含 <select> 的网格单元的客户端值
【发布时间】:2010-07-02 13:16:15
【问题描述】:

我正在尝试编写一个 jquery 函数来扫描整个 jqrid 以检查其任何单元格是否具有值。

我遇到的问题是似乎没有办法检索包含选择框的单元格的选定值。 jqgrid docs 明确说明了getCellgetRowData 方法的以下内容。

当你 编辑行或单元格。这会 返回单元格内容而不是 输入元素的实际值

这很公平,但鉴于此,我如何真正获得价值?

无法解析从选择内容返回的 html,因为没有任何选项被标记为已选择,即使它们在浏览器中似乎已被选中。

这里是我的代码的 sn-p 供参考:

var colModels = this.grid.jqGrid('getGridParam', 'colModel');
for (i = 1; i < colModels.length; i++) {
            var colModel = colModels[i];
            if (colModel.edittype == 'select') {
                var colData = this.grid.jqGrid('getCol', colModel.name, false);
                for (j = 0; j < colData.length; j++) {
                    if (colData[j] != 0) {
                        //alert("select change: " + colData[j]);
                        //alert(j+' GridName_' + colModel.name)
                        //alert("select change: " + $('#GridName_' + colModel.name).val());
                        //return has value?;
                    } 
                }
            }
        }

列定义:

{ name: "AppleId", index: "Appled", width: 150, align: "left", resizable: false, editable: true, edittype: "select", editoptions: { value: function() { return xxx.buildAppleSelect(); } }, formatter: function(cellvalue, options, rowObject, action) { return xxx.buildAppleSelectHtml(cellvalue); } };

我还尝试了afterEditCell 和其他类似事件 - 但问题在于 - 单击选择框不会将出售置于编辑模式 - 您必须先单击单元格,然后再单击选择。

简而言之 - 我如何获得选定的值,客户端 - 可以做到吗?

有类似的问题hereherehere。但似乎没有人解决这个问题(客户端)。

【问题讨论】:

    标签: jqgrid


    【解决方案1】:

    没有。这是我使用 getRowData 从测试网格中获得的一些 HTML:

    <select class="editable" size="1" name="test" id="5_test">
     <option value="0">Zero</option>
     <option value="1">One</option>
     <option value="3">Three</option>
     <option value="4">Four</option>
    </select>
    

    您是对的 - 标记中没有足够的信息来确定选择了哪个值。为了获得选定的值,您必须使该行退出编辑模式,例如使用网格方法saveRow

    【讨论】:

    • 不,这不会起作用 - 需要明确的是,像这样的 html 总是返回(即没有选择的选项)。无论单元格是否处于编辑模式。
    • OK... 我在生产代码中有使用选择的网格。在这些网格中,我使用editable: true,edittype:"select"} 表示他们使用下拉菜单。然后,当我想获取所选值时,我只需使用getRowData 并说data.ColumnName,其中包含下拉列表中所选项目的值。我错过了什么吗?您是否试图让该行始终显示一个下拉列表,即使它没有被编辑??
    • 您能否提供您正在使用的 jQuery 的 sn-p 以获取实际值然后请。当我尝试这个时:$('#MyGrid').getRowData(-1).APropertyWithSelect。虽然你最后的评论让我思考。是的,我总是显示下拉菜单,即使它没有被编辑。一定是这个问题?
    • 是的,我认为这就是问题所在。 jqGrid 期望隐藏未被编辑的行的下拉列表。
    【解决方案2】:

    在我看来,丹你走错了路。我不太明白你为什么想要包含&lt;select&gt; 的网格单元,但如果你能解释一下你想要什么,我相信我会找到解决你问题的方法。

    首先我解释一下我在你的问题中发现的奇怪之处。如果您定义edittype: "select",那么jqGid 通常有一个字符串而不是一个&lt;select&gt; 元素。如果您处于 en 编辑模式(例如内联编辑模式),则除选定行之外的所有其他行也有一个字符串,而不是内部的 &lt;select&gt; 元素。如果用户做出选择并按下回车,编辑模式将结束,修改后的数据将被保存(或发送到服务器)。因此,之前显示的值也不重要。

    在我看来,由于buildAppleSelect 中的一些自定义值构建和buildAppleSelectHtml 中的自定义格式,您遇到了一些问题。

    如果您想从选择中查看中间值,您可以在 editoptions 中使用 dataEvents'change'

    我希望你现在明白我在你的问题中发现的奇怪之处。如果您向我解释您的问题是什么以及为什么您确实有多个 &lt;select&gt; 元素并且想要读取中间选择值,我会尝试为您找到解决方案。

    更新:我发布了一个代码,显示了如何在JQGrid Inline Editing : Filter subcategory dropdown list based on another category dropdown 中使用dataEvents'change'。可能会对你有所帮助。

    【讨论】:

    • Oleg - 我需要一个单元格来包含一个下拉框,这就是需要 select 的原因。我不完全理解您的第一个查询 - 但我不能依赖发送到服务器的任何变量,对于此功能,我需要客户端值。我不确定buildAppleSelectbuildAppleSelectHtml 方法是否存在错误,因为它们仅在首次构建网格时调用。我会看看 dataEvents 看看是否能满足我的需要。
    • 我想说的是edittype: "select"的列有一个字符串作为值,而不是&lt;select&gt;的html片段。唯一具有&lt;select&gt; 的行是处于编辑模式的行。所以你只能对网格中的一个单元格有问题。我不明白为什么您需要在不保存行之前选择当前的&lt;select&gt;。如果您在同一行中有多个&lt;select&gt;,并尝试根据另一个&lt;select&gt; 上的当前选择修改一个&lt;select&gt;,您可以使用dataEvents'change'
    猜你喜欢
    • 2011-03-07
    • 2019-01-20
    • 1970-01-01
    • 2017-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-30
    • 2014-10-20
    相关资源
    最近更新 更多