我使用DOM来获取多个类名并传递一个函数(with_value)来访问各个元素。但是我得到一个Uncaught TypeError无法读取未定义的属性'innerHTML'。 代码是:
<script>
var token = 1;
var x = document.getElementsByName("commpare_name");
var y = document.getElementsByName("compare_image");
function add_compare(num)
{ num=0;
var a = x[num].innerHTML.toUpperCase();
alert(a);
document.getElementById('name1').innerHTML = a;
document.getElementById('name1').title = a
document.getElementById('pics1').src = x[num].src;
a = document.getElementById('view-details0').action;
}
</script>
<span id="compare_name" name="compare_name" >no1</span>
<form id="view-details0">
<input type="button" value="Add to Compare" onclick="add_compare(1)">
</form>
<span id="compare_name" name="compare_name" >no1</span>
<form id="view-details0">
<input type="button" value="Add to Compare" onclick="add_compare(2)">
</form>
编辑:
<a class="description" id="name1" href="" target="_blank" title="ADD TO COMPARE" ><span>ADD TO COMPARE</span></a>
innerHTML和它的href需要改变
答案 0 :(得分:3)
您在脚本中提供了错误的名称
commpare_name - > compare_name
答案 1 :(得分:1)
实际问题是您在加载DOM内容之前执行JavaScript。将您的JS包装在
中window.addEventListener('DOMContentLoaded',function(){
…
});
或将<script>
放在<body>
的底部。
执行时
var x = document.getElementsByName("commpare_name");
你得到一个空的NodeList
,因为还没有具有这种名字的元素。当您尝试访问x[num]
时,x[0]
属性0
不存在,因此会生成undefined
。
var a = x[num].innerHTML.toUpperCase();
之后.innerHTML
正在从undefined
读取,这是不可能的。
更新:我没有意识到name
拼写错误,Vivek Gupta指出了错误。你显然必须改变它。如果您的<script>
实际上高于该HTML,那么您仍然需要更改脚本位置或如上所述将其包装。
答案 2 :(得分:0)
static string para1 ; static string para2;
string[] parts = urlString.Split((new string[] { "?para1=", "&¶2="}), StringSplitOptions.None);
para1 = parts[1];
para2= parts[2];
应该是..
var x = document.getElementsByName("commpare_name");