gpt4 book ai didi

javascript - document.getElementById 使用变量将 Id 传递给函数 onclick 返回 null

转载 作者:行者123 更新时间:2023-12-03 10:13:25 24 4
gpt4 key购买 nike

我对 JSON 文件进行了两次搜索,在两个单独的 div 中的页面的两个不同部分上生成结果。结果是通过for循环产生的,并且在两个结果div中分别创建了许多隐藏的div,通过onclick显示。 div #1 中的 id 为“a”+i,其中 i 是 for 循环计数器。 Div #2 与隐藏 id 类似,为“aa”+i。不得有重复的 ID。如果我传递隐藏 div 的 id 来显示它,则函数 unhyde() 中的 document.getElementById 为 null:

function allWriter() {
var i = "2"; // to simulate one for loop iteration
var theid = "a"+i;
var out = '<div onclick="unhyde('+theid+')">John Smith</div>';
out +='<div id="'+theid+'\" style="display: none;">Read This</div>';
document.getElementById('b').innerHTML = out;
}

function unhyde (theid) {
document.getElementById(theid).style.display="block";

<body>
<div onclick="allWriter()">start</div>
<div id="b"></div>
</body>
为什么?但以下方法有效,但“a”或“aa”必须在 unhyde() 函数中硬编码,而我不希望这样:

function allWriter() {
var i = "2"; // to simulate one for loop iteration
var out = '<div onclick=\"unhyde('+i+')">John Smith</div>';
out +='<div id="a'+i+'" style="display: none;">Read This</div>';
document.getElementById('b').innerHTML = out;
}

function unhyde (i) {
document.getElementById('a'+i).style.display="block";
}

<body>
<div onclick="allWriter()">start</div>
<div id="b"></div>
</body>

如何通过将整个 id 作为变量传递并使用相同的 unhyde() 函数来实现此目的,而不管 id 是什么?为什么这两个例子有差异?我宁愿不使用 JQuery,但只有在没有其他方法的情况下才会使用。

最佳答案

如果您查看第一个示例生成的代码,您会发现它生成了

onlick="unhyde(a2)"

即它尝试将变量a2传递给函数。巧合的是,它确实存在。它引用 ID 为 a2 的 DOM 元素。但是,由于该值已经是 DOM 元素,因此您无法将其传递给 document.getElementByIdgetElementById 需要一个字符串。

第二种情况不存在问题,因为生成的代码是 unhyde(2),即您将数字 2 传递给函数,并且 "a"+ 2 将生成字符串 "a2"getElementById 乐意接受它。

要修复第一个示例,您只需添加引号,以便传递一个字符串 (unhyde("a2")):

var out = '<div onclick="unhyde(\''+theid+'\')">John Smith</div>';

这实际上是一个很好的例子,说明为什么动态创建 HTML 并不是一个很好的方法。更简洁的解决方案是创建 DOM 元素并直接绑定(bind)事件处理程序。

关于javascript - document.getElementById 使用变量将 Id 传递给函数 onclick 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30006310/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com