只有在 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/