0

使用 jqGrid 4.5.2 & 需要为网格内的特定行动态填充网格。例如 - 如果 p & q 都 = 1,那么我想为每行显示一个下拉列表,其中 bothp = 1和 where q = 1

如果p = 1' andq = 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();
}

在格式化程序中(在ColModeljqGrid 中),我尝试使用上面的函数创建下拉列表。

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事件中更好地完成?

4

0 回答 0