未捕获的TypeError:undefined不是函数(关于视频暂停函数)

时间:2014-05-08 15:41:38

标签: javascript jquery html5 function

我正在尝试暂停jQuery对象的视频并且收到错误消息:

未捕获的TypeError:undefined不是函数

Heres de code:

    function daVideos(myVideo, arrPause, _src)
    {
         $player = myVideo.get(0);
         $player.attr('src', _src);
         $player.addEventListener("timeupdate", function(event)
         {
              var isPause = false;

              for(var i=0; i<arrPause.lenght; i++)
              {

                    if($player.currentTime >= arrPause[i]  && !isPause)
                    {
                        isPause = true;
                        $player.pause();

                    }
              } 
         });
    }

     var arr1 = [2,4];
     daVideos($("#video"), arr1, "video/sintel_trailer-1080p.mp4");

任何人都可以帮我说出我做错了什么???

2 个答案:

答案 0 :(得分:2)

$player = myVideo.get(0);
$player.attr('src', _src);
$player.addEventListener("timeupdate", function(event)

让我们考虑一下这些问题。首先,我们有一个jQuery对象(myVideo)。然后,我们使用get(0)$player)获取本机DOM对象。然后,我们尝试在本机DOM对象上调用jQuery函数(attr)(这是发生错误的地方,因为本机DOM对象没有attr函数)。然后,我们尝试使用原生addEventListener系统添加事件。

这一切似乎有点复杂,有点困惑。简单的解决方案就是在整个过程中使用jQuery:

var $player = myVideo.get(0); // keep for later, note we're using var
myVideo.attr('src', _src);
myVideo.on('timeupdate', function(event)

另一种选择就是使用DOM:

var $player = myVideo.get(0); // note that we're using var again
$player.src = _src;
$player.addEventListener("timeupdate", function(event)

答案 1 :(得分:0)

此代码

$player = myVideo.get(0);

给出了真实的元素,而不是jQuery包装器。 attr是jQuery包装器对象的一种方法。

如果你想获得jQuery对象的第一个元素,但仍然将它包装在jQuery中,你可以使用eq而不是get

$player = myVideo.eq(0);
$player.attr('src', _src);

注意,您必须获取真实元素,或使用on代替addEventListener

或者,您可以使用vanilla-js方式:

$player = myVideo.get(0);
$player.setAttribute('src', _src);