0

只有在 Firefox 上我才会收到此错误:

ID/NAME 在全局范围内引用的元素。请改用 W3C 标准 document.getElementById()。

if (c.checked == 1)

GFPart...vitate= (line 17)

TypeError: c is null

if (c.checked == 1)

我的 Javascript 看起来像这样:

<script type="text/javascript">
    function SavePartners() {
        var poz = '@ViewBag.Activity';
        var rowCount = dataTable.rows.length;
        var ala0 = "";
        for (var i = 1; i < rowCount; i++) {
            var c = document.getElementById("chkpart" + i);
            if (c.checked == 1)
                ala0 += dataTable.rows[i].cells[1].innerText + "^";
            var ala = ala0.substring(0, ala0.length - 1);
        }
    $.ajax({
        url: '@Url.Action("TPartners")',
        data: { pozActivitate: poz, listapart: ala },
        dataType: "Json",
        type: "POST",
        error: function () {
            alert("Error");
        },
        success: function (data) {
            window.close();
        }
    });
}

我的 HTML 看起来像这样(它的表格有 2 列,1 列带有复选框,2 列带有合作伙伴的名称)

        <tr>
            <td style="border-left: none;">
                @if (listaDeTest.Activity!= 0)
                {
                    string x = (from a in listaDeTest.PartenerName
                                where a == s
                                select a).FirstOrDefault();
                    if (x == null)
                    {
                    <input type="checkbox" name="chkpart @i" />
                    }
                    else
                    {
                    <input type="checkbox" name="chkpart @i"  checked="checked"/>                         
                    }
                }
                else
                {
                    <input type="checkbox" name="chkpart @i" />
                }
            </td>
            <td>
                <p style="margin-left: 5px;">@s</p>
            </td>
        </tr> 

....最后有一个带有 onclick 功能的按钮。任何想法可能是什么?因为在 IE 中完美运行。提前致谢

4

2 回答 2

2

Internet Explorer 和 Chrome 自动为具有“id”值的 DOM 元素创建全局变量。Firefox 没有,因为没有标准规定它应该(无论如何这是一个愚蠢的想法)。

因此,在 Internet Explorer 中,页面上有一个 HTML 标记,如下所示:

<div id='container'>
   ...
</div>

意味着您还有一个window名为“容器”的全局变量(属性),其值是对 DOM 元素的引用<div>。在 Firefox 中,您不需要。你必须打电话

var container = document.getElementById('container');

获取对 DOM 元素的引用。

在您的代码中不清楚 Firefox 抱怨什么参考;我怀疑它是“dataTable”,我猜它是<table>. 但是你没有发布,所以我不确定。

编辑——哦,还有一件事:Internet Explorer 出于未知原因,从.getElementById()基于元素名称的调用中返回元素。Firefox 或其他浏览器不会复制该错误行为。您的输入元素具有“名称”属性,但没有“id”。

于 2012-09-05T13:29:06.627 回答
2

那么这段代码有什么作用呢?

var c = document.getElementById("chkpart" + i);

它正在寻找一个ID!现在看看你的代码,你缺少什么?

<input type="checkbox" name="chkpart @i" />

没有身份证!name 属性不是 id 属性。

于 2012-09-05T13:44:06.933 回答