我对下面的代码有问题。这里有 4 个可见元素:2 个表格单元格和 2 个输入文本框。最后一个输入文本框显示单击的前 3 个元素(2 个单元格和第一个输入框(中任何一个元素的名称。单击前 3 个元素中的任何一个都将使用 "this" 参数 (now(this(( 调用 now(( 函数。 然后,now 函数将单击元素的名称分配给 elemName 变量,将单击元素的背景更改为蓝色,并将要识别的最后一个文本框的值设置为元素名称。为什么单击任何人时始终未定义单元格名称?复制并试用代码。我需要答案。
<html>
<head>
<script>
function now(elementa){
elemName=elementa.name;
elementa.style.backgroundColor = 'blue';
document.getElementById("clickedElementName").value=elementa.name;
} //end of now() function
</script>
</head>
<body>
<table border="1" >
<td name="cell1" onclick="now(this)">cell 1</td>
<td name="cell2" onclick="now(this)">cell 2</td>
</table><br>
<input value=mdfkjkjei name="input" onclick="now(this)" type=text />
<br><br>
clicked elements name:<input id="clickedElementName" type=text />
</body>
</html>
单击单元格时,最后一个输入文本框应显示其 HTML 名称属性,但它显示未定义。但是当我单击第一个输入文本框时,它会显示其名称(输入(。 为什么表单元格的名称未定义。 表格单元格是否不允许在 html 中具有名称属性?
td
元素没有name
属性,因此它们没有name
反射属性。如果使用name
属性(无效(,则可以通过getAttribute("name")
获取其值:
function now(elementa) {
var elemName = elementa.getAttribute("name"); // ***
elementa.style.backgroundColor = 'blue';
document.getElementById("clickedElementName").value = elemName; // ***
} //end of now() function
<html>
<head>
<script>
function now(elementa) {
var elemName = elementa.getAttribute("name");
elementa.style.backgroundColor = 'blue';
document.getElementById("clickedElementName").value = elemName;
} //end of now() function
</script>
</head>
<body>
<table border="1">
<td name="cell1" onclick="now(this)">cell 1</td>
<td name="cell2" onclick="now(this)">cell 2</td>
</table><br>
<input value=mdfkjkjei name="input" onclick="now(this)" type=text />
<br><br> clicked elements name:<input id="clickedElementName" type=text />
</body>
</html>
(另请注意,我声明了elemName
变量,所以你不会成为隐式全局的恐怖的牺牲品[这是我贫血的小博客上的一篇文章]。
但是,如果要在元素上放置非标准属性,请使用data-
前缀:
<td data-name="cell1" ..>
function now(elementa) {
var elemName = elementa.getAttribute("data-name"); // ***
elementa.style.backgroundColor = 'blue';
document.getElementById("clickedElementName").value = elemName;
} //end of now() function
<html>
<head>
<script>
function now(elementa) {
var elemName = elementa.getAttribute("data-name"); // ***
elementa.style.backgroundColor = 'blue';
document.getElementById("clickedElementName").value = elemName;
} //end of now() function
</script>
</head>
<body>
<table border="1">
<td data-name="cell1" onclick="now(this)">cell 1</td>
<td data-name="cell2" onclick="now(this)">cell 2</td>
</table><br>
<input value=mdfkjkjei name="input" onclick="now(this)" type=text />
<br><br> clicked elements name:<input id="clickedElementName" type=text />
</body>
</html>
用户交互元素只有默认的名称属性,如input,select,button
。td
不必 that.so 通过 dom 中的getAttribute()
函数获取名称
function now(elementa){
elemName=elementa.name;
elementa.style.backgroundColor = 'blue';
document.getElementById("clickedElementName").value=elementa.getAttribute('name');
}
<table border="1" >
<td name="cell1" onclick="now(this)">cell 1</td>
<td name="cell2" onclick="now(this)">cell 2</td>
</table><br>
<input value=mdfkjkjei name="input" onclick="now(this)" type=text />
<br><br>
clicked elements name:<input id="clickedElementName" type=text />