2012-03-18 48 views
1

我很新的HTML5/Javascript/CSS3和即時通訊混淆瞭如何將我的事件偵聽器的ID傳遞給新的函數。我正在建立一個視頻播放器,這是音量上下的部分,我寧願能夠使用一個函數來調高音量和使用if語句來檢查音量。如何通過事件偵聽器點擊後ID功能

這裏是什麼即時通訊與工作:

volume_up = document.getElementById('volume_up'); //get the volume_up button 
volume_up.addEventListener('click', volumeUp, false); //call function "volumeUp" on click 

這裏是「volumeUp」功能:

function volumeUp(click_button){ 
alert(click_button.id); // i want to be able to get the id here 
myMovie.volume = myMovie.volume - 0.1; 
} 

如果我能得到的ID,我可以做捲起來,卷下來在這個函數中,而不是2個通過if語句。

我也試着這樣做:

volume_up.addEventListener('click', volumeUp(volume_up), false); 

volume_up.addEventListener('click', volumeUp(volume_up.id), false); 

沒有運氣。我將音量調高按鈕連接起來,每當我按下它時,音量就會改變,並且彈出警報,但它說未定義。

任何幫助,將不勝感激。謝謝:)

回答

2

在事件處理程序「this」綁定到觸發事件的元素,所以你可以使用「this.id」。

看看這個例子:http://jsfiddle.net/vyGdJ/

+0

當我這樣做時,它會回來作爲undefined..hmmm – Jacob 2012-03-18 07:29:05

+0

警報框說undefined * – Jacob 2012-03-18 07:29:22

+0

您使用哪個瀏覽器? – 2012-03-18 07:30:32

3
document.getElementById('volume_up').addEventListener('click', _volume, false); 
document.getElementById('volume_down').addEventListener('click', _volume, false); 

function _volume(event){ 
    if(this.id == 'volume_up') { 
     myMovie.volume += 0.1; 
    } else { 
     myMovie.volume -= 0.1; 
    } 
} 

這僅僅是一個例子。您需要使用一些防禦性邏輯來檢查IE,並在適用時使用attachEvent

這些沒有工作的原因...

volume_up.addEventListener('click', volumeUp(volume_up), false); 
volume_up.addEventListener('click', volumeUp(volume_up.id), false); 

...是因爲你調用函數並傳遞的volumeUp結果作爲回調,這將不會是一個typeof == 'function'