2015-07-19 94 views
1

我有一个以前的问题2 audio sounds and I want to play one HTML5 audio element at a time,这是回答。不过,我有2个问题:空和在html页面上放置外部javascript

1)需要帮助解释它:从什么不.bind空(NULL,音频[I [)是什么意思?我研究了null,但仍然混淆。

外部JS:

var audios = document.getElementsByTagName('audio'); 
for(var i=0; i<audios.length;i++) { 
    audios[i].onplay = pauseAllAudios.bind(null, audios[i]); 
} 

function pauseAllAudios(audio){ 
    for(var i=0; i<audios.length;i++) 
     if(audios[i]!=audio) { 
     } audios[i].pause(); 
    } 
}; 

2)当我把这个在 HTML网页:

<script type="text/javascript" src="js/audio.js"></script> 

</head>节的JavaScript不起作用。如果我把它放在以前</body>部分,

的JavaScript的作品。 JavaScript不应该在这两个领域工作?

+0

你需要了解两个概念,DOM就绪事件DOM操作和'bind'和'apply'方法API – vinayakj

回答

0
  1. .bind()功能让你回来的是,被调用时,将使用传递给.bind()作为this值的第一个参数另一个函数。您pauseAllAudios()功能不使用this,所以通过null只是让thisnull。真的,它可能是任何东西,但null是一个很好的可读标记,这意味着“我的功能不需要this被绑定到任何东西”。

  2. 代码工作时,它在体内的最终因为浏览器上运行的代码,因为他们遇到它,在构建DOM。当脚本位于head部分时,包含音频元素的DOM部分尚不存在。当它位于主体的末尾时,DOM(几乎)完成。

+0

1)I我是JavaScript的初学者。仍然有点混淆null。这是什么”? 2)所以为了在头部我可能不得不添加window.onload = function(){code} ? – user5117220

+0

@ user5117220 well'this'是JavaScript中的保留符号。 [这是一个稍微老的问题,有一些很好的信息。](http://stackoverflow.com/questions/3127429/how-does-the-this-keyword-work)理解“this”很重要。至于你的第二个问题,是的,使用“onload”处理程序可以让你把脚本放在''中,但是把它放在''末尾没什么问题。 – Pointy

+0

我很感谢你的耐心, 那么“this”的情况是指window Object?我想我很迷惑,如果null是一个占位符,我不明白为什么我不能这样做: audios [i] .onplay = pauseAllAudios.bind(audios [i]); 但是,如果我这样做,什么都不玩。所以我明白我需要它,但是为什么我需要它。空参数或参数? – user5117220

0

对于第二个问题,也许是JS/audio.js然后当你把它的头它是必要的文件之前,所以它不能工作需要其他JavaScript文件,当你把它放在</body>之前它需要的js文件加载后,然后工作