我正在尝试编写一个jquery函数来扫描整个jqrid以检查它的任何单元格是否有值。
我遇到的问题是,似乎没有办法检索包含选择框的单元格的选定值。 jqgrid docs明确指出了getCell
和getRowData
方法的以下内容。
当你使用这种方法时 编辑行或单元格。这将 返回单元格内容而不是 输入元素的实际值
这是公平的,但鉴于此,我如何实际获得价值?
无法解析从select内容返回的html,因为没有任何选项被标记为已选中,即使它们似乎在浏览器中被选中。
此处参考是我的代码片段:
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和其他类似的事件 - 但问题是 - 单击选择框不会使卖出处于编辑模式 - 您必须先单击单元格然后单击选择。
简而言之 - 如何获得所选值,客户端 - 是否可以完成?
答案 0 :(得分:0)
没有。以下是我使用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
。
答案 1 :(得分:0)
在我看来Dan,你是以错误的方式去的。我真的不明白为什么你想要包含<select>
的网格单元,但如果你能解释我你想要什么,我相信我会找到你问题的解决方案。
首先,我解释一下我在你的问题中发现的奇怪内容。如果您定义edittype: "select"
,那么jqGid通常包含一个字符串,而不是<select>
元素。如果您处于编辑模式(例如,在内联编辑模式下),则除了所选行之外的所有其他行都有一个字符串,而不是内部的<select>
元素。如果用户进行了选择并按Enter键,则编辑模式将结束,修改后的数据将被保存(或发送至服务器)。因此,之前显示的值也不重要。
在我看来,由于buildAppleSelect
中的一些自定义值构建和buildAppleSelectHtml
中的自定义格式设置,您遇到了一些问题。
如果您想查看来自select的中间值,可以在dataEvents
中使用'change'
editoptions
。
我希望你现在明白我在你的问题中发现的奇怪之处。如果您解释我的问题是什么以及为什么您有多个<select>
元素,并且想要读取中间选择值,我会尝试为您找到解决方案。
更新:我发布了一个代码,其中显示了如何在JQGrid Inline Editing : Filter subcategory dropdown list based on another category dropdown中使用dataEvents
和'change'
。可能它会帮助你。