事件侦听器中的Javascript回调

事件侦听器中的Javascript回调,javascript,jquery,callback,event-handling,jquery-callback,Javascript,Jquery,Callback,Event Handling,Jquery Callback,我目前正在尝试实现一个系统,其中回调是从事件侦听器中触发的(下面的代码)。当我运行代码时,我得到了错误“callback不是一个函数”,我认为这是因为变量callback不是由事件侦听器定义的 function playSound(no, callback) { var noOfSounds = sound().length; if(no == "random" || no == undefined) { act("There are "+noOfSounds+" Sounds");

我目前正在尝试实现一个系统,其中回调是从事件侦听器中触发的(下面的代码)。当我运行代码时,我得到了错误“callback不是一个函数”,我认为这是因为变量callback不是由事件侦听器定义的

function playSound(no, callback) {
var noOfSounds = sound().length;
if(no == "random" || no == undefined) {
    act("There are "+noOfSounds+" Sounds");
    var randomNo = Math.floor(Math.random() * noOfSounds);
    act("Will use no."+randomNo);
    playSound(randomNo);
} else {
    sound()[no].addEventListener("ended", function() {

        callback();

    });
    sound()[no].play();
}}

我认为您的问题在于调用函数的方式。如果我看第10行,你是说

 playSound(randomNo)
应该是

 playSound(randomNo, function(){
    //code to execute in callback
});

这是因为您调用时试图使用回调函数,该函数应在调用方法时添加到输入参数中。

调用时未传递回调函数
playSound(randomNo)抱歉,我应该澄清一下,当发生此错误时,我正在从另一个函数调用playSound函数,我还不担心函数内部的调用(稍后我将添加一些逻辑以确定是否已传递回调)。TL;DR:如果传递回调,则仍会发生此错误。您需要向我们显示更多代码。例如,您正在调用playsound函数和正在传递的回调函数。