jqgrid不显示特殊符号

时间:2012-01-31 16:27:21

标签: jquery jqgrid

我需要jqgrid来显示一些特殊字符,例如&#34; <test>&#34;在某些列中,尝试使用autoencode=true,但它将所有列更改为HTML编码,就像我在其他一些不需要编码的列中有按钮一样,我们可以为特定列设置自动编码吗?有什么想法吗?

编辑:我使用了oleg提出的格式化程序,但是我遇到问题,我在cols中有按钮,我需要在编辑模式之间切换到&#39;保存&#39;保存和完成&#39 ;和&#39;取消&#39;我发布了代码,但我不确定如何在编辑模式下隐藏/取消隐藏按钮之间切换:

网格设置:

            $("#list").jqGrid({
            url: '<%= Url.Action("JSONData","CompanyInfo")%>',
            datatype: 'json',
            colNames: ['ID', 'Company', 'Address' , 'Employers ', ''],
            colModel: [
                { name: 'ID', index: 'ID', align: 'left', sortable: false, editable: true, hidden: true },
                { name: 'Company', index: 'Company', align: 'left', sortable: false, editable: false, formatter: ConvertLineChartoBR },
                { name: 'Address', index: 'Address', editoptions: { size: 100 }, align: 'left', sortable: false, editable: true, edittype: 'textarea', formatter: ConvertLineChartoBR, unformat: ConvertLineChartoN }, 
                { name: 'Employers', index: 'Employers', editoptions: { size: 100 }, align: 'left', sortable: false, editable: true, edittype: 'textarea' },
                { name: 'act', index: 'act', editable: false, sortable: false, fixed: true, formatter: setupEdit}],
            pager: $('#pager'),
            autowidth: true,
            shrinkToFit: true,
            rowNum: currRecords,
            rowList: [5, 10, 20, 50],
            recordtext: "View Records {0} - {1} of {2}",
            emptyrecords: "No records to view",
            pgtext: "Page {0} of {1}",
            sortorder: "desc",
            viewrecords: true,
            autoencode: true,
            caption: 'Test'
        });

SetupEdit(格式化程序)

      function setupEdit(cellvalue,options,rowObject) {

      var btnSave = "<input type='button' value='Save' style='display:none' onclick=\"$('#list').jqGrid('saveRow', '" + options.rowId + "', null,  '<%= Url.Action("GridSave","Company")%>', null, aftersavefunc);\" />";
      var btnSaveFinished = "<input type='button' value='Save & Finish' style='display:none' onclick=\"$('#list').jqGrid('saveRow', '" + options.rowId + "', null, '<%= Url.Action("GridSaveFinished","Company")%>', null, aftersavefunc);\" />";
      var btnCancel = "<input type='button' value='Cancel' style='display:none' onclick=\"$('#list').jqGrid('restoreRow', '" + options.rowId + "', aftercancelfunc);\" />";
      var Edit =  "<input type='button' value='Edit' class='editButton' onclick=\"$('#list').jqGrid('editRow','" + options.rowId+ "',false,oneditfunc);\" />";
        return btnSave + btnSaveFinished + btnCancel + Edit;
    }

OnEdit(点击编辑按钮)

 function oneditfunc(result, x) {
  // I need to unhide the button of the last column where buttons are populated in setupEdit
  // On Edit click, i need to enable btnSave,btnSaveFinished and btnCancel
  //Again on aftersavefunc/aftercancelfunc i need to reset back the column value to display on Edit button
 }

4 个答案:

答案 0 :(得分:2)

很遗憾,您无法仅为一列设置autoencode: true

我认为您真正的问题是因为您在创建按钮的列中以错误的方式放置HTML标记。可能你将HTML标记作为数据的一部分,这是不好的。更好的方法是使用custom formatters。在这种情况下,您应该只在按钮列的JSON输入中放置 data ,它可以由formater使用,例如作为按钮的文本。如果按钮需要相同的文本,则可以为按钮列提供空数据。例如

formatter: function () {
    return "<span class='ui-icon ui-icon-plus'></span>";
}

如果您可以毫无问题地使用autoencode: true。按钮将根据需要显示,<test>等文本将被编码并正确显示。

更新:您可以使用我在许多旧答案中使用的getColumnIndexByName

var getColumnIndexByName = function (grid, columnName) {
        var cm = grid.jqGrid('getGridParam', 'colModel'), i, l = cm.length;
        for (i = 0; i < l; i++) {
            if (cm[i].name === columnName) {
                return i; // return the index
            }
        }
        return -1;
    };

它可以帮助您通过列获取colModel中的列索引。例如,使按钮看起来对应于您可以使用的jQuery UI样式

loadComplete: function () {
    var iAct = getColumnIndexByName ($(this), 'act');
    $(this).find("tbody>tr.jqgrow>td:nth-child(" + (iAct + 1) +
        ")>input[type='button']").button();
}

让我们知道rowid,并希望获得您在“行动”列中放置的按钮。然后你需要从那里显示一些或隐藏其他。您可以使用以下代码片段:

var iAct = getColumnIndexByName ($(this), 'act'),
    $td = $('#' + $.jgrid.jqID(rowid) + ">td:nth-child(" + (iAct + 1) + ")"),
    $save = $td.find(">input[value='Save']"),
    $saveAndFinish = $td.find(">input[value='Save & Finish']"),
    $cancel = $td.find(">input[value='Cancel']"),
    $edit = $td.find(">input[value='Edit']");
$save.show();
$saveAndFinish.show();
$cancel.show();
$edit.hide();

我建议您使用带有工具提示的图标而不是按钮中的文本来保存网格中的位置。

答案 1 :(得分:0)

分别为&gt;&lt;尝试HTML实体><

我在下面使用它们:

  

&LT;试验&gt;

另一个可能有用的字符是&amp;的{​​{1}}。

答案 2 :(得分:0)

有解释为html标签。你只需要将< and >更改为&lt; and &gt; ..如果你使用php,htmlspecialchars函数将帮助你做到这一点。但我相信在大多数语言中都有类似的功能。

答案 3 :(得分:0)

Does jqgrid display special characters?

“你还需要在PHP中使用utf8_encode(”string“)你的字符串。”