2012-12-25 47 views
0

我是JQuery的新手。我查過以前的帖子,但找不到任何東西。我試圖從Video Ended事件處理函數調用另一個函數。它不工作。來自JQuery的函數調用事件處理程序

$(document).ready(function(){ 
    // doing something 
    $("#video1").bind("ended", NextFrag()); 
}); 

function NextFrag(){ 
    Window.alert("Hello World"); 
} 

這是行不通的。我看不到任何警報打印「Hello World」。

基本上我需要解決上述問題來完成以下任務。我想播放不同的視頻片段。算法應該是這樣的:

$(document).ready(function(){ 
    NextFrag(); 
}); 

function NextFrag(){ 

    // IF First FRAGMENT do this 
     $("#video1").html('<source src="FirstURLFromArray.mp4" type="video/mp4"></source>'); 

    // ELSE DO THIS 
     $("#video1").bind("ended", function(){ 
     $("#video1").html('<source src="NextURLFromArray.mp4" type="video/mp4"></source>'); 
     NextFrag(); // call itself again.  
     }); 
} 

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

+0

'$(「#video1」).bind(「ended」,NextFrag);'拋棄parens。你想綁定該函數,而不是立即調用它。 –

+0

'窗口'是小寫的,在camelcase中不起作用。 – adeneo

+0

愚蠢的我。你們都是對的。非常感謝。它的工作現在。 – smaj08r

回答

3

嘗試

$("#video1").bind("ended", NextFrag); 

這將傳遞給函數作爲回調,而不是評估它。

+0

嚴格地說,該功能在這一點上已經被評估過了。函數調用評估函數的主體,但函數本身在其函數對象被提取時(在這種情況下,函數聲明被計算時)被評估。 –

+0

我剛完成任務併發布了最終代碼(哎呀!!!!我無法回答自己的問題8個小時 - 我明天就會這樣做)。非常感謝您的幫助。我不確定你能否幫助我獲得一些觀點。 – smaj08r

2
$(document).ready(function(){ 
    $("#video1").on("ended", function() { 
    NextFrag(); 
    }); 
}); 

function NextFrag(){ 
    alert("Hello World"); 
} 
+0

我實際上需要在使用結束的事件處理程序之前加載第一個視頻。非常感謝您的回覆。 – smaj08r

0

感謝您的幫助。 我剛完成任務。我做了這樣的事情,它正在工作。

var index = 0; 
$(document).ready(function(){ 
NextFrag(); 
}); 

function NextFrag(){ 
if (index < url.length){ 
    if(index == 0) 
    { 
     //The only difference for index=0 is that the player is not autoplay 
     $("#video1").html('<source src= " '+ url[index] + '" type="video/mp4"></source>'); 
     index++; 
     $("#video1").bind("ended", NextFrag); 

    }else 
    { 
     $("#VideoContainer").html('<video id="video1" controls autoplay > "<source src= "'+ url[index]+ '" type="video/mp4"></source> </video>'); 
     index++; 
     $("#video1").bind("ended", NextFrag); 
    } 
} 
} 
相關問題