Firefox奇怪的问题

时间:2012-09-05 13:27:26

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

仅在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表示Checkbox,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中工作得很好。提前致谢

2 个答案:

答案 0 :(得分:2)

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

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

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

表示您还有一个名为“container”的全局变量(window属性),其值是对<div>的DOM元素的引用。在Firefox中,你没有。你必须致电

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

获取对DOM元素的引用。

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

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

答案 1 :(得分:2)

那么这段代码做了什么?

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

正在寻找身份证!现在看看你的代码,你缺少什么?

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

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