javascript - 火狐浏览器奇怪的问题

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

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

Element referenced by ID/NAME in the global scope. Use W3C standard document.getElementById() instead.

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 不这样做,因为没有标准规定它应该这样做(无论如何,这是一个愚蠢的想法)。

因此,在 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”。

关于javascript - 火狐浏览器奇怪的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12282567/

相关文章:

jquery - Javascript block 在 mvc3 razor 模板中呈现为 html 实体字符串

css - Firefox 字段的浏览器特定 CSS 填充

javascript - 如何根据浏览器语言更改翻译浏览或选择文件作为表单输入类型=文件

javascript - 使用 CryptoJS (JAVASCRIPT) 和 OpenSSL (PHP) 实现相同的加密

javascript - 正则表达式匹配部分单词,前面没有任何内容,但允许有空格

javascript - 多复选框组值的多维数组 jQuery 后数组 AJAX

java - selenium webdriver 测试被浏览器空闲警告窗口停止

javascript - 按数字顺序排列 linq.js 结果

entity-framework-4 - 从 db 填充下拉列表

asp.net-mvc - 在 ASP.NET MVC 3 中使用 HtmlHelper 获取当前 View 的 URL