2015-07-19 93 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文件加載後,然後工作