我有以下 html 头,它加载 3 个 JS 文件:search.js、create.js 和maps.js:
<head>
<title>Simple Map</title>
<meta name="viewport" content="initial-scale=1.0">
<meta charset="utf-8">
<link rel="stylesheet" type="text/css" href="/maps.css" />
<script
src="https://code.jquery.com/jquery-3.1.1.min.js"
integrity="sha256-hVVnYaiADRTO2PzUGmuLJr8BLUSjGIZsDYGmIJLv2b8="
crossorigin="anonymous"></script>
<script src="https://maps.googleapis.com/maps/api/js?key=<my-key>=initMap"
async defer></script>
<script src="/search.js"></script>
<script src="/create.js"></script>
<script src="/maps.js"></script>
</head>
我还有以下服务器端代码:
var express =
require('express');
var path = require('path');
var app = express();
app.use('/', express.static(path.join(__dirname, 'static')))
app.get('/', function(req, res) {
res.sendFile(__dirname+'/index.html');
});
app.listen(3000, function () {
console.log('meetup listening on port 3000!')
})
当index.html加载时,客户端似乎只执行一个JS脚本(通过在每个文件中记录“script x returned”进行测试)。执行的脚本始终是最后加载到头部的脚本。 (即,如果 <script src="/search.js"></script>
是最后一个,则控制台将仅记录“脚本 search.js 已加载”)。执行的脚本始终按预期工作。其他脚本都在js控制台加载,但不执行。对这里出了什么问题有什么想法吗?
编辑:所有三个脚本看起来都像
window.onload = (function(){
console.log('search.js loaded');
/*
*event handling and DOM manipulation logic here
*/
});
已修复:已替换 window.onload = (function(){...});
与 $(document).ready(function(){...});
最佳答案
这可能与您在脚本中设置事件处理程序的方式有关。您只能为“window.onload”事件使用一个事件处理程序,就像您所显示的那样。因此,加载脚本时不会调用同一事件的所有其他事件处理程序。 尝试使用类似的东西:
window.addEventListener("onload", function(){
console.log('I am loaded');
});
使用上述内容,您可以让多个事件处理程序监听同一事件,在本例中为 onload 事件。 我希望这会有所帮助。
关于javascript - 页面加载时仅执行一个 JS 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40599336/