访问通过其他脚本插入的 HTML 元素



感谢BABYLONjs,我正在开发图形界面,我决定实现模式选择功能,这意味着您可以选择编辑模式或可视化模式。这两种模式都有不同的 HTML 组件,所以我选择编写一个构造脚本,该脚本将通过实现与所选模式相对应的正确元素来创建 HTML。让我们称 A.js构造脚本,将 B.js我的主要脚本和我的所有功能。

当我在 B 中.js试图获取一个 HTML 元素时,例如通过 A.js 插入的按钮,返回的值为null(我使用 document.getELementById('element'( 获取元素(。

我确保在我的 HTML 中包含 A.js 之前的 B.js,所以我真的不明白为什么它不起作用.

如果您需要更高的精度,请随时询问。 谢谢!

确保两个javascript文档都附加到同一个HTML文件,以便document引用相同的内容。

还要确保您正在执行的所有操作都是同步的。例如,如果您使用的是异步window.addEventListener('onload')那么它是异步的。这意味着该代码实际上并未运行,而是等待一段时间才能自行运行。同时,它可能会决定运行您的 B.js 代码,此时您选择的元素尚不存在。

如果这是问题所在,请在window.addEventListener('onload')中运行 B.js 脚本。

第三件事是,您的 A.js 脚本可能位于函数内部,需要运行该函数才能将元素添加到 DOM 中。


如果没有实际代码,就很难调试您提出的特定问题。如果您需要更好的答案,请包含实际的演示代码,以便我们更好地识别问题。


编辑:代码已发布。

正如您发布的那样,在您的代码中,您正在定义构造函数,但随后告诉浏览器在窗口加载时运行它。然后,在调用构造函数之前运行 A.js。有两种解决方案。

将整个 B.js 包裹在window.addEventListener("load")中,或者做一些完全不同的事情。

在 A.js 之前包含 B.js,并定义一个名为 B(( 的函数。把你所有的代码都放进去。然后,在构造函数结束时调用 B((。这意味着 B.js 也将被迫等待窗口加载。我希望这有帮助!

我看到你使用jQuery。如果要捕获动态创建的元素上的事件,则应绑定到父元素(或文档(:

$(document).ready(function() {
$(document).on("click","#testone",function() {
alert("clicked");
});
}

这是我想做的一个例子:

.HTML:

<!DOCTYPE html>
<html>
<head>
<title> Test </title>
<meta http-equiv="Content-Type" content="text/html" charset="utf-8" />
</head>
<body id=inserthere>
<header> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<!-- <script style="text/javascript" src="a.js" defer></script> --> 
<!-- <script style="text/javascript" src="b.js" defer></script> -->
<header>
</body> 
</html>

答.js :

function construction(){
$("#inserthere").append("<button id='testone' class='btn'> 1 </button>");
$("#inserthere").append("<button id='testtwo' class='btn'  > 2</button>");
}
window.addEventListener("load", construction);

B.js :

var test1 = document.getElementById("testone");
test1.addEventListener("click", function(){
alert("clicked");
});
var test2 = document.getElementById("testtwo");
test2.addEventListener("dblclick", function(){
alert("doubleclicked");
})

这些是试图重现我的情况的简短示例,希望对您有所帮助!

最新更新