如何允许在jqGrid中使用区分大小写的行ID

时间:2011-08-29 12:38:18

标签: jqgrid

如果jqGrid行id(从服务器中的json数据作为单独的id属性传递)仅因情况而异,则无法正确启动内联编辑:

在第二行中双击将第一行置于内联编辑模式。 如何使jqgrid行id区分大小写?

从服务器读取的数据是:

{"total":1,"page":1,"records":2,"rows":[

{"id":"arvelduste_20seis","cell":[null,"arvelduste seis"]},
{"id":"Arvelduste_20seis","cell":[null,"Arvelduste seis"]}

]}

1 个答案:

答案 0 :(得分:1)

对我来说,这似乎是Internet Explorer中的一个错误。在官方文档对象模型HTML标准中,我可以找到关于jqGrid密集使用的namedItem方法的the following描述:

  

此方法使用名称检索节点。使用[HTML 4.01]文档,   它首先搜索具有匹配id属性的Node。如果它   找不到一个,然后搜索具有匹配名称的节点   属性,但仅限于那些允许名称的元素   属性。使用[XHTML 1.0]文档时,此方法仅搜索   具有匹配id属性的节点。此方法不区分大小写   HTML文档和XHTML文档中区分大小写。

因此,namedItem方法应该在XHTML文档中区分大小写。另一方面,你可以在the demo中测试,它只使用没有jQuery或jqGrid的纯DOM,该方法在Internet Explorer中工作不区分大小写

演示的HTML代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>http://stackoverflow.com/questions/7230179/how-to-allow-to-use-case-sensitive-row-ids-in-jqgrid/7236985#7236985</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
    <table id="t">
        <tbody>
            <tr id="x"><td>1</td></tr>
            <tr id="X"><td>2</td></tr>
        </tbody>
    </table>
    <script type="text/javascript">
        'use strict';
        var mytable = document.getElementById("t"),
            tr1 = mytable.rows.namedItem("x"),
            tr2 = mytable.rows.namedItem("X"),
            tr3 = document.getElementById("x"),
            tr4 = document.getElementById("X");
        alert("getElementById works " + (tr3.id === tr4.id ? "case insensitive (BUG!!!)": "case sensitive") +
              "\nnamedItem works " + (tr1.id === tr2.id ? "case insensitive (BUG!!!)": "case sensitive"));
    </script>
</body>
</html>

Internet Explorer显示namedItem("X")返回id =“x”的行而不是id =“X”的行。在我测试它的所有其他(非Microsoft)Web浏览器中不存在相同的错误。

我不能建议你目前没有解决方法。你应该组织你的程序,这样你就不会在表格中使用区分大小写的id(以及jqGrid)。

更新:还有更多信息。

我向微软提出了有关所描述主题的官方支持请求。 Microsoft确认这是Internet Explorer中的错误,但当前Internet Explorer版本中的错误将无法修复,但可能 已在IE10中修复。作为一种解决方法:-)有人建议不要使用仅在案例中区分的ID。所以不要使用可以重现错误的ID。所以我们在之前的评论中得到的结果与我之前的假设一样。

尽管如此,由于回复确认这是一个错误,微软的请求对我来说是免费的(: - ))。