【问题标题】:Firefox weird issue火狐奇怪的问题
【发布时间】:2012-08-30 05:45:00
【问题描述】:

只有在 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 中完美运行。提前致谢

【问题讨论】:

  • 也许在你的 添加
  • 元素“name”或“id”属性中不允许有空格。
  • @MikeThunder ??我不明白。事实是,如果getElementById() 返回null,则意味着没有带有您传递的“id”的元素。
  • 即使我的代码如下所示: 我得到同样的错误
  • 在你的名字中使用 - 而不是空格。

标签: javascript asp.net-mvc-3 firefox onclick html-table


【解决方案1】:

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

因此,在 Internet Explorer 中,页面上的 HTML 标记如下:

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

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

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

获取对 DOM 元素的引用。

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

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

【讨论】:

  • 是的,我通过了第一个问题(带有 document.getElementById() 的那个),但现在我被困在 TypeError: c is null if (c.checked == 1) ... . 即使我选择了几个合作伙伴:(
  • 好吧@MikeThunder,这只是意味着您要查找的元素不存在-也就是说,没有“id”值为“chkpart22”或其他任何元素的元素。您应该使用 Firebug 或其他东西来确定“i”是什么,这样您就可以看到 HTML 被破坏的地方..
  • 是的,它是 dataTable > var dataTable = document.getElementById('dataTable');
  • @MikeThunder 啊我会更新我的答案 - 我刚刚注意到别的东西
  • 我用 ID 更改了 name 属性...仍然没有中断
【解决方案2】:

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

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

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

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

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

【讨论】:

  • 我用ID更改了name属性...仍然没有分手
  • 输入的生成标记是什么样的?查看源代码。
  • 以此类推,直到 id="chkpart 10"
  • 你的 id 有空格,因为 id 不能有空格,所以它不起作用。删除空格。
  • 但同样的问题
猜你喜欢
  • 1970-01-01
  • 2011-06-29
  • 1970-01-01
  • 1970-01-01
  • 2011-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多