的JavaScript。 Var ++没有正常工作

时间:2013-11-04 10:28:11

标签: javascript recursion

我已经学习了几天JS。 stackoverflow是一个很大的帮助。然而,我想出了一个我甚至无法确定或描述的问题(因为我是新手)。

我建了一个<基于音频>的mp3播放器。 您需要自己查看/尝试。 (对不起)

Please check JS code here - ctrl-f 'STACKoverflow' in it - AntonFrolov.net/music.php

以下是您需要执行的操作,以查看问题所在(我已将这些内容放到网站上)。

  1. 点击曲目#2 - 您会注意到一个提示('Track#'+ ID); = [Track#2]
  2. 右下角有一名玩家 - 将跟踪进度设置为98%,以便结束。
  3. (ID ++),您被发送到第3道。 alert('Track#'+ ID); = [Track#3]。好。
  4. 重复步骤2.
  5. (ID ++),您应该被发送到#4轨道。 ......问题事件:

    • 5a上。 alert('Track#'+ ID); = [Track#3]。
    • 5b中。曲目#3开始播放。再次。然后你立即收到下一个..警报
    • 5c所示。 alert('Track#'+ ID); = [Track#4]。
    • 5D。第4轨开始播放。这就是我的预期,但没有事件5a-5b。
  6. 如果您继续执行此步骤,这将继续。

    然而JS代码在这里:

        function FuncPlay(ID,Rnd){
        alert('Track #'+ID);
        if (Rnd==0){
        $('.liActive').removeClass('liActive');
        $('#'+ID).next().addClass('liActive');
    
    
        // Set track Data
        $('audio').attr('id','audioNor');
        $('audio').attr('src',$('.liActive').attr('rel'));
    
        // Play
        var player = $('.tbd').get(0);
        player.play();
        $('#pause').removeClass('hi');
        ID++;
            $(player).bind('ended', function () { 
                    if (ID <= <?php echo $am ?>){FuncPlay(ID, 0);}
                    else {alert('"...End of the list."' );}
            });
        }
    }
    

    我完全不知道如何处理这个问题。感谢您的耐心等待。

2 个答案:

答案 0 :(得分:2)

我认为问题在于您将ended - 处理程序多次绑定到您的播放器。每次调用FuncPlay时,它都会被另一次附加。 因此,例如,如果然后轨道5开始,它将首先调用轨道3的处理程序,然后轨道4,最后轨道5。

您可以做的是创建一个名为ID的全局变量,并仅在调用document ready时绑定到处理程序。在handler-function中,您可以引用此全局变量。 或者,在调用$(player).bind之前,删除对玩家ended事件的所有绑定。

另外,我建议使用.on().bind()仍可用于向后兼容。取消绑定事件处理程序的方法是.off() / .unbind()

答案 1 :(得分:0)

你没有取消绑定你'结束'的事件监听器。是第二首歌叫2次,第3次叫3次等等。