2017-04-24 11 views
4

首先,我感謝給出的任何指示....讓我通過說,我正在學習Javascript和HTML。我該如何在JavaScript中創建一個全局的函數來顯示我的html

我的問題是,我想打電話給我的功能來更新音頻時間,像這樣:

<audio id="track" preload="auto" type="audio/mpeg" ontimeupdate="displayTime(this)"> 
      <source src="mp3/mysong.mp3" type="audio/mpeg"> 
      Unsupported audio format! 
     </audio> 

我的功能是在JavaScript的IFFE功能:

$(document).ready(function() { 
... /*Global Variables*/ 

... 

function displayTime(event) { 

      sec = Math.floor(event.duration); 
      min = Math.floor(sec/60); 
      min = min >= 10 ? min : '0' + min; 
      sec = Math.floor(sec % 60); 
      sec = sec >= 10 ? sec : '0' + sec; 


      ct_sec = Math.floor(event.currentTime); 
      ct_min = Math.floor(ct_sec/60); 
      ct_min = ct_min >= 10 ? ct_min : '0' + ct_min; 
      ct_sec = Math.floor(ct_sec % 60); 
      ct_sec = ct_sec >= 10 ? ct_sec : '0' + ct_sec; 


      document.getElementById('ticker').innerHTML = ct_min + ":" + ct_sec + "-" + min + ":" + sec; 

     } 



}); 

任何人都可以提出建議,爲什麼我得到的錯誤函數displayTime(this)未定義?我也嘗試使用window.myFunction嘗試使它成爲全球的...無濟於事。

+1

分配到'window'屬性是正確的事情。如果這不起作用,你沒有正確地做,但是因爲你沒有發佈該代碼,所以沒人能說出原因。 – Pointy

+1

要獲得額外榮譽,請查看本機和JQuery事件的方式:https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener和http://api.jquery.com/on/ – Shilly

+1

您也可以在就緒功能中註冊事件!通過做'$(document).on('timeupdate「,」#track「,displayTime)' – funcoding

回答

5

因爲它在函數的作用域之外是不可見的。

聲明後分配功能的參考全局對象

window.displayTime = displayTime; 
+0

像魅力一樣工作!......只要它讓我接受你的答案。 – suffa

+0

高興它幫助:) – Karim

1

凡是在document.ready處理器將這個函數的範圍內付諸表決。因此,如果您希望函數在範圍內聲明爲全局函數,則需要在全局範圍內聲明該函數,然後可以將其與前綴window.一起使用。

$(document).ready(function() { 
... /*Global Variables*/ 
window.displayTime = function (event) { ... } 
}); 

用法:

<button onclick="window.displayTime()">test</button> 
0

或者以使全球的功能,你也可以通過JavaScript附加事件監聽器是這樣的:

$('#track').on('timeupdate', displayTime); 
相關問題