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

Uncaught TypeError: undefined is not a function (on video pause function)

本文关键字:函数 视频 暂停 undefined TypeError      更新时间:2023-09-26

我正在尝试用jQuery对象暂停视频,并一直得到一个错误,说:

Uncaught TypeError: undefined is not a function

下面是代码:

    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");

谁能帮我说我做错了什么??

$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)

此代码

$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);