Firefox奇怪的问题

Firefox weird issue

本文关键字:问题 Firefox      更新时间:2023-09-26

只有在Firefox上才会出现此错误:

全局作用域中ID/NAME引用的元素。请改用W3C标准文档.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中工作非常完美。提前感谢

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

因此,在InternetExplorer中,页面上有一个HTML标签,如下所示:

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

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

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

以获取对DOM元素的引用。

您的代码中不清楚Firefox抱怨的是什么引用;我怀疑它是"dataTable",我猜它是<table>的id。但是你没有发布,所以我不确定。

编辑—哦,还有一件事:由于未知的原因,InternetExplorer从基于元素name.getElementById()调用中返回元素。Firefox或其他浏览器不会复制这种错误行为。您的输入元素有一个"name"属性,但没有"id"。

那么这个代码是做什么的呢?

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

它在找身份证!现在看看你的代码,你遗漏了什么?

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

没有id!name属性不是id属性。