我正在使用 jqGrid 4.5.2 并且正在使用自定义格式化程序根据来自其他(隐藏)单元格的值在 jqGrid 行中的单元格中构建一个下拉框。
下拉框的选择是根据对 SQL 表的查询结果构建的。此外,我还在它前面加上一行作为指导信息。下拉菜单的构建方式如下:
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("CannedTextID").text();
var dtext = $(this).find("DisplayText").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");
}
});
msgSelect = $("#msglist").select();
}
结果被放入页面中的表单中,HTML如下:
<form class="Messages" action="">
<select id="msglist" class="choices" name="msglist">
<option value="0" disabled="disabled">Select Message</option>
<option value="7"> Message2</option>
<option value="8"> Message3</option>
<option value="9"> Message4</option>
<option value="10"> Message5</option>
<option value="11"> Message6</option>
<option value="12"> Message7</option>
<option value="13">Intermittent problems</option>
<option value="14">Local Network Connectivity issue</option>
<option value="15">Message15</option>
</select>
</form>
在函数的最后,我设置了一个全局变量msgSelect = $("#msglist").select();
在格式化程序中,在满足下拉菜单的条件下,我返回:
return msgSelect[0].outerHTML;
这会在 jqGrid 中显示下拉框,但不会Select Message
像初始下拉框那样显示第一行 =,而是显示Message2
。在 jqGrid 行中,Select Message
灰显且无法选择,但下拉菜单默认为第二行。这select
与我在页面其他位置放置的下拉框中的 HTML 相同(即被Select Message
禁用,并且在任何地方都没有设置为默认值)。
为什么 jqGrid 自定义格式化程序显示 HTML 的方式不同,即使代码完全相同?