我的Javascript没有'当我把一个脚本元素放在头上从URL加载它时,它不起作用
My Javascript doesn't work when I put a script element in the head to load it from a URL
我已经为一个简单的内联函数编写了代码,但当我创建一个单独的js.file时,由于某种原因,它不想工作。我试过所有感觉,但也许我疲惫的眼睛什么都做不到!
<!DOCTYPE html>
<html>
<head>
<title>Test</title>
<script type="text/javascript" src="menu.js"></script>
</head>
<body>
<div class="container">
<button name="one">Button 1</button>
<p>
Lorem ipsum dolor sit amet
</p>
</div>
<div class="container">
<button name="two">Button 2</button>
<p>
Lorem ipsum dolor sit amet
</p>
</div>
<div class="container">
<button name="three">Button 3</button>
<p>
Lorem ipsum dolor sit amet
</p>
</div>
这个想法是有三个按钮,当你点击其中一个按钮时,只有一个div会显示,另外两个会被隐藏。
以下是JavaScript(在内联中运行得非常好):
var first_container = document.querySelectorAll(' div:not(:first-child) p');
for (var i = 0; i < first_container.length; i++) {
first_container[i].style.visibility = 'hidden';
}
var buttons = document.querySelectorAll('button');
for (var i = 0; i < buttons.length; i++) {
buttons[i].addEventListener('click', clickHandler);
}
function clickHandler(e) {
e.preventDefault();
var text = document.querySelectorAll('p');
for (var i = 0; i < text.length; i++) {
if (text[i] === event.target.nextElementSibling) {
text[i].style.visibility = 'visible';
} else {
text[i].style.visibility = 'hidden';
}
}
}
当您将脚本放在外部文件中,然后从<head>
加载该外部脚本时,它会在DOM准备好之前加载。这意味着,如果脚本试图像使用document.querySelectorAll()
一样引用页面中的元素,那么这些元素将不存在。
解决这个问题的简单方法是简单地移动脚本标记:
<script type="text/javascript" src="menu.js"></script>
至CCD_ 3的正前方。然后,在脚本运行之前,页面的所有元素都将被解析并在DOM中:
<!DOCTYPE html>
<html>
<head>
<title>Test</title>
</head>
<body>
<div class="container">
<button name="one">Button 1</button>
<p>
Lorem ipsum dolor sit amet
</p>
</div>
<div class="container">
<button name="two">Button 2</button>
<p>
Lorem ipsum dolor sit amet
</p>
</div>
<div class="container">
<button name="three">Button 3</button>
<p>
Lorem ipsum dolor sit amet
</p>
</div>
<script type="text/javascript" src="menu.js"></script>
</body>
</html>
或者,您可以使用一个脚本,该脚本将在DOM准备就绪时通知您,然后您可以调用代码。
如果你想把代码放在<head>
部分,或者让代码可以放在任何地方,请参阅这篇参考文章和高度投票的答案,了解一种简单的Javascript和跨浏览器的等待方式,直到DOM准备好。
尝试javascript的onload()
事件。之所以会发生这种情况,是因为当您在<head>..</head>
中添加脚本时,甚至在加载网页之前,脚本就立即开始工作。因此,要处理此问题,您需要确保脚本在页面完全加载后开始工作。为此,在window.onload = function(){ //here your code goes };
中完成页面加载后,编写您需要工作的javascript代码或函数
更新菜单.js文件如下:
javascript:
menu.js
window.onload = function(){
// your javascript code goes here...
};
引用:加载()
当您将脚本从内联移动到外部时,还将脚本标记移动到<head>
。
现在,脚本在任何与div:not(:first-child) p
匹配的元素存在之前运行,因此first_container
中没有任何元素
将脚本元素移回以前的位置。
或者,将您的代码移动到一个函数中,然后在加载文档后运行该函数(例如,使用addEventListener('load', your_function)
)。
- 操作放置在画布上的元素之间的连接
- 如何知道元素在屏幕上是否可见.如果没有,请滚动页面
- 在页面上创建多个元素,而不是一个发生更改的元素
- 在IE8上使用jQuery克隆HTML5元素和事件
- 在多个元素上使用jquery插件,只需稍作修改
- 如果侦听器附加到父元素,是否可以区分单击发生在哪个子元素上
- jQuery悬停动画只在其他类似元素中的一个元素上
- 如何在元素中处理鼠标事件,但不能在其子元素上处理
- 如何设置第一个子元素's的单选按钮已在轨道上检查4
- jquery点击选择器附加在多个元素上
- 在几个元素上模拟onclick事件
- 如何激活下拉菜单:在一个元素上单击768px宽度下方,在另一个元素上将鼠标悬停在768px上方
- 当鼠标悬停在iframe上时,如何在iframe之外的元素上触发类
- 在 JavaScript 上添加请求标头
- 在多个元素上运行的函数插入多个图像
- 在所选元素的父元素上添加“ng-class”
- 在iPad上,如何通过Javascript事件在选择元素上设置focus()而不显示选项
- 伪元素上的过渡结束未在 Edge 上触发
- 在更改选择元素后,在 Javascript 上使用旧值和新值
- jQuery val() 返回一个在 select/option 元素上带有 IE8 的数组