Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Js函数总是返回相同的值_Javascript_Jquery - Fatal编程技术网

Javascript Js函数总是返回相同的值

Javascript Js函数总是返回相同的值,javascript,jquery,Javascript,Jquery,这里是初学者 我有这样一个函数: generateSteps: function() { var stepsLength = this.data.steps.length; var dataStepsInit = this.data.steps; for (var i = 0; i < stepsLength; i++) { var stepsItem = dataStepsInit[i

这里是初学者

我有这样一个函数:

generateSteps: function() {
            var stepsLength = this.data.steps.length;
            var dataStepsInit = this.data.steps;
            for (var i = 0; i < stepsLength; i++) {
                var stepsItem = dataStepsInit[i].ITEM;
                var arrayItem = this.animationNodes[stepsItem - 1];
                var transition = this.animationParameters[i].transition;
                var options = this.animationParameters[i].options;
                var speed = this.animationParameters[i].speed;
                var delay = this.animationParameters[i].delay;
                arrayItem.delay(delay).show(transition, options, speed);

                if (dataStepsInit[i].AUDIOID) {
                    var audioClass = dataStepsInit[i].AUDIOID;
                    var audioPlayer = this.template.find("audio." + audioClass);

                    setTimeout(playAudioOnDelay,delay);
                };

                var playAudioOnDelay = function() {
                    audioPlayer[0].pause();
                    audioPlayer[0].currentTime = 0;
                    audioPlayer[0].play();
                };

            }
        }
generateSteps:function(){
var stepsLength=this.data.steps.length;
var datastepsini=this.data.steps;
对于(变量i=0;i
它所做的是从JSON生成数据,并在延迟时逐个显示动画元素。动画部分工作良好。我可以为DOM元素分配所需的动画和延迟,并按正确的顺序显示它们

但我想同时做的是在延迟时播放音频(所以我使用setTimeout)。一切都很好,我在正确的时间(正确的延迟值)播放音频,但我始终播放相同的音频(这是最后一个元素),因为audioPlayer始终是相同的DOM节点

我认为这与这个有关,还是我混合了一个范围

试试这个:

generateSteps: function() {
        var stepsLength = this.data.steps.length;
        var dataStepsInit = this.data.steps;
        for (var i = 0; i < stepsLength; i++) {
            var stepsItem = dataStepsInit[i].ITEM;
            var arrayItem = this.animationNodes[stepsItem - 1];
            var transition = this.animationParameters[i].transition;
            var options = this.animationParameters[i].options;
            var speed = this.animationParameters[i].speed;
            var delay = this.animationParameters[i].delay;
            arrayItem.delay(delay).show(transition, options, speed);

            if (dataStepsInit[i].AUDIOID) {
                var audioClass = dataStepsInit[i].AUDIOID;
                var audioPlayer = this.template.find("audio." + audioClass);

                setTimeout(playAudioOnDelay(audioPlayer),delay);
            };

        }

        function playAudioOnDelay(audioPlayer){
            return function(){
                audioPlayer[0].pause();
                audioPlayer[0].currentTime = 0;
                audioPlayer[0].play();
            }
        }
 }
generateSteps:function(){
var stepsLength=this.data.steps.length;
var datastepsini=this.data.steps;
对于(变量i=0;i
基本上,您的问题如下所示:

解决办法是:


检查浏览器中的控制台。

谢谢。现在我将记住使用返回函数。你能解释一下为什么要创建var t吗?var t=设置超时(播放AudioOnDelay(音频播放器),延迟);抱歉..没有意义使用
var t
。在我得到你的答案之前,我一直在消磨时间。编辑。