使用 jqGrid 4.5.2 & 需要为网格内的特定行动态填充网格。例如 - 如果 p & q 都 = 1,那么我想为每行显示一个下拉列表,其中 bothp = 1
和 where q = 1
。
如果p = 1' and
q = 0` 那么我想在这些行中显示一个按钮。
我custom formatter
在 jqGrid 中执行所有这些操作。我可以在页面的其他地方创建一个下拉列表,但不能将它绑定到它需要位于的网格中的行。当我尝试从格式化程序中构建下拉列表时,我无法引用它。我创建select
如下:
function getMsgs() {
$.ajax({
type: "GET",
url: myUrl,
dataType: "xml",
success: function(data) {
var select = $("#msglist");
var selectline = $("<option value='0'>Select Message</option>");
select.prepend(selectline);
$(data).find("Row").each(function() {
var ctid = $(this).find("msgID").text();
var dtext = $(this).find("msgText").text();
var option = $("<option>" + dtext + "</option>");
option.prop("value", ctid);
select.append(option);
});
// make the instructional message unselectable
$("#msglist option[value='0']").attr("disabled", "disabled");
$("#msglist option[value='0']").attr("selected", "selected");
}
});
msgSelect = $("#msglist").select();
}
在格式化程序中(在ColModel
jqGrid 中),我尝试使用上面的函数创建下拉列表。
if (p === "1") && (q === "1") {
getMsgs();
........
全局变量msgSelect
中没有任何内容。
如果我在页面的其他位置(一次)创建下拉列表,我可以select
通过返回来访问该部分msgSelect[0].outerHTML;
。如果我在动态创建下拉列表时尝试这样做,它会说msgSelect[0] is undefined
.
我不确定我做错了什么,因为我知道该getMsgs
函数返回数据 - 我只是无法访问它或将该控件绑定到该 jqGrid 行。对于我做错了什么,我将不胜感激。
编辑
@Oleg - 我一直在尝试动态创建下拉列表,最后发现我不能像我想要的那样做,因为你已经确认了。然后我所做的是创建一个全局变量msgSelect
并在同一个AJAX success:
事件中将 HTML 代码分配给它:
msgSelect = "<select name='rlist' id='rlist' class='choices'>";
.....
success: function(data) {
var selectline = "<option selected='selected' disabled='disabled' value='0'>Select Message</option>";
msgSelect = msgSelect + selectline;
var optionString="";
$(data).find("Row").each(function() {
....
....
var option="<option value='" + ctid + "'>"+dtext+"</option>"
optionString = optionString + option;
}); // end of success & AJAX function
.....
msgSelect = msgSelect + optionString + "</select>";
并msgSelect
在适当的时候在自定义格式化程序中返回,该格式化程序填充在 jqGrid 的每一行中。(msgSelect
只需要加载一次)。
我确实有(另一个)jqGrid 自定义格式化程序问题。根据值(隐藏的),我不仅需要该单元格中的下拉列表、提交按钮或简单文本具有不同的大小、样式、颜色或字体。例如 - 带有下拉菜单的行应该是红色文本 18 pt 粗体字体。带有按钮的行应该是橙色的粗体字体。信息行应为黑色文本。可以/应该在自定义格式化程序中完成,还是在loadComplete
事件中更好地完成?