javascript - 当从另一个文件中包含时,函数停止工作

标签 javascript html css

如果我能够制作自己的简单视频播放器,我想做一个快速实验。到目前为止,这是我的 HTML:

<!DOCTYPE html> 
<html>
<head>
<link rel="stylesheet" type="text/css" href="style.css">
<script src="main.js" type="text/javascript"></script>
</head>
<body> 

<div style="text-align:center"> 
  <button onclick="playPause()">Play/Pause</button> 
  <button onclick="makeBig()">Big</button>
  <button onclick="makeSmall()">Small</button>
  <button onclick="makeNormal()">Normal</button>
  <br><br>
  <video id="video1" width="420">
    <source src="https://www.sample-videos.com/video123/mp4/240/big_buck_bunny_240p_30mb.mp4" type="video/mp4">
    Your browser does not support HTML5 video.
  </video>
</div> 

<script>
var myVideo = document.getElementById("video1"); 

function playPause() { 
  if (myVideo.paused) 
    myVideo.play(); 
  else 
    myVideo.pause(); 
} 

function makeBig() { 
    myVideo.width = 560; 
} 

function makeSmall() { 
    myVideo.width = 320; 
} 

function makeNormal() { 
    myVideo.width = 420; 
} 

</script>

</body> 
</html>

如您所见,它运行完美。不过,如果我将我的脚本添加到一个新文件中,结果如下......

alert("file included."); // check if file has been included correctly

var myVideo = document.getElementById("video1"); 

function playPause() { 
  if (myVideo.paused) 
    myVideo.play(); 
  else 
    myVideo.pause(); 
} 

function makeBig() { 
    myVideo.width = 560; 
} 

function makeSmall() { 
    myVideo.width = 320; 
} 

function makeNormal() { 
    myVideo.width = 420; 
} 
<!DOCTYPE html> 
<html>
<head>
<link rel="stylesheet" type="text/css" href="style.css">
<script src="main.js" type="text/javascript"></script>
</head>
<body> 

<div style="text-align:center"> 
  <button onclick="playPause()">Play/Pause</button> 
  <button onclick="makeBig()">Big</button>
  <button onclick="makeSmall()">Small</button>
  <button onclick="makeNormal()">Normal</button>
  <br><br>
  <video id="video1" width="420">
    <source src="https://www.sample-videos.com/video123/mp4/240/big_buck_bunny_240p_30mb.mp4" type="video/mp4">
    Your browser does not support HTML5 video.
  </video>
</div> 


</body> 
</html>

好吧,出于某种原因它在这里仍然可以工作,但是如果您将代码复制到“index.html”和“main.js”中,您将收到以下错误:

Uncaught TypeError: Cannot read property 'paused' of null
    at playPause (main.js:6)
    at HTMLButtonElement.onclick ((index):10)

当 html 中包含 javascript 代码时,不会发生该错误。 这是为什么?我正在使用 Chrome 。

谢谢!

最佳答案

ID 为 video1 的元素无法访问,因为 DOM 尚未完全加载。考虑将 script 元素移动到 body 的底部或使用事件 DOMContentLoaded .

关于javascript - 当从另一个文件中包含时,函数停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56712075/

相关文章:

javascript - 通过在 JSON 数据中查找值来创建新的对象数组

javascript - Angular CLI(ng --version)命令错误 TS 和 WebPack

javascript - 强制元素具有相同的边界(单独的内联 block / float :left; clear:right doesn't work)

html - 包括网格系统以包括表 - Bootstrap

html - 是否可以使用 CSS 转换显示?

javascript - 是否有用于禁用/启用 Firefox 扩展的 API?

javascript - Mongoose 方法中这个变量的上下文是什么?

php - 如果数据库中不存在用户,则显示一条消息

css - 这是一个 CSS 继承问题吗?

jquery - 默认关闭 Bootstrap 导航栏