【问题标题】:Jqgrid inline edit displays nbsp; instead of spaces for one columnjqgrid内联编辑显示nbsp;而不是一列的空格
【发布时间】:2015-01-01 19:24:10
【问题描述】:

jqgrid 列包含电话号码。

对于一行,如果内联编辑已经开始,  字符会出现而不是空格:

之前:

编辑开始后:

保存后nbsp;也保存在电话号码中。 如何解决或诊断此问题?

如果使用表单编辑,这些字符也会出现。 电话号码也包含空格的其他行正确显示。此行中的其他列也可以正常显示。

本栏colmodel:

{"label":"Telefon","name":"Telefon","index":"Telefon","editoptions":{"maxlength":25,"size":25,"dataEvents":[{"type":"change","fn":function(e) {dataChanged(e.target)}
},{"type":"focus","fn":function(e) {if(typeof e.target.ischanged=='undefined') {e.target.ischanged=false}}
}],"readonly":null,"class":null,"disabled":null},"editable":true,"width":66,"classes":null,"hidden":false,"searchoptions":{"sopt":["cn","eq","ne","lt","le","gt","ge","bw","ew","nc"]},"stype":"text"},

jqgrid 由服务器中的 json 数据填充:

{"total":1,"page":1,"rows":[{"id":"7","cell":[null,"","7","XXXanval Mll OÜ","Tarnija","","","","","","","","","","3 725 141 100","","","Ursel","","","","","","","","","","02","",""]}]}

正确填充的其他行包含类似的数据,可能会填充更多的列。

jqgrid 设置:

   $.extend($.jgrid.defaults, {
        mtype: 'POST',

        toppager: true,
        viewrecords: false,
        recordpos: 'center',
        pagerpos: 'right',
        rowList: [50, 500, 1000],
        rowNum: 50,
        rownumbers: true,
        onSelectRow: grid_onSelectRow,
        onSelectAll: grid_onSelectAll,
        multiselect: true,
        ajaxRowOptions: { async: true },
        scrollrows: true,
        prmNames: {  
            id: "_rowid", page: "_page", rows: "_rows", oper: "_oper", sort: "_sidx", order: "_sord",
            nd: "_nd"
        },
        loadui: 'block',
        cmTemplate: { fixed: true },
        autoencode: true,
        gridview: true,
  ...

【问题讨论】:

    标签: javascript jquery jqgrid


    【解决方案1】:

    您的输入数据中存在问题。你提供了不正确的数据。真实数据已经包含non-breaking space。您的服务器返回的 JSON 数据不是 "3 725 141 100"(里面有空格,空格有代码 32 或 0x20),而是"3 725 141 100"(里面有不间断空格,有代码160 或 0xA0)。

    HTTP 流量中的 UTF-8 编码数据看起来像

    解码后的数据看起来像

    上图展示了你以HEX格式显示的原始JSON数据的片段。我用绿色标记了标准空间,用红色标记了从服务器返回的数据中使用的空间。要解决该问题,您应该在数据库或服务器代码中或在 JavaScript 代码中的客户端对数据进行规范化。无论如何,您应该将所有不需要的不间断空格替换为标准空格。

    【讨论】:

    • 不间断空格是正确的数据。但是它被转换为  字符保存。在 jqgrid 中开始编辑和保存而不进行任何更改会导致数据损坏。如何解决这个问题,以便 jqgrid 在编辑时正确显示和保存不间断空间?
    • @Andrus:我不认为在输入数据中使用不间断空格是标准情况。如果您需要通过保存原始   ( ) 来编辑此类数据,那么您应该使用一些 HTML 编辑器,例如 tinyMCE,而不是标准文本输入。我建议你做的是将  字符的输入发短信并将这些符号替换为空格。
    • 使用从文档中复制和粘贴来复制电话号码。非中断空间意味着不允许额外的间距或包装。如果将数字从 jqgrid 复制回文档,这很有用。这是标准用法。在内联编辑中,输入字段是一个行高,其宽度是列宽。 tinyMCE 和其他需要更多空间进行编辑。如何使用它们以便编辑不占用比 input type=text 元素更多的空间?
    • @Andrus:我不确定您可以拥有的输入数据的确切格式以及保存它所需的格式。您可以使用简单的编辑字段,但要在开始内联编辑之前添加替换 ,并将空格替换回 。我可以想象许多替代实现,但似乎我与您的数据的 specific 格式非常接近。我认为最大的问题是找到这种奇怪行为的原因。解决方法在我看来并不那么复杂。
    • 这对我来说就像一个 jQGrid 错误。不间断的空间确实来自pdf和文档的复制和粘贴。 jQGrid 只将 HTML 实体 ( ) 插入纯文本区域是不正确的。打印原始的不间断空格字符会更正确。不幸的是,我能找到的唯一解决方法是预先清理不间断空格的文本字符串。
    猜你喜欢
    • 2012-07-10
    • 1970-01-01
    • 1970-01-01
    • 2012-10-09
    • 2015-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多