2012-12-25 48 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); 
    } 
} 
} 
相关问题