仅在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中工作得很好。提前致谢
答案 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属性。