javascript:未捕获的TypeError:无法读取属性'播放'未定义的

时间:2014-10-15 20:38:13

标签: javascript

我的网站上有一部fiew电影,我不能播放电影。

这是java中的代码。我将视频ID的名称发送到javascript:

for(int i=1; i<=Integer.parseInt(film[0][0]); i++)
         {

             nr="id"+Integer.toString(i);
             printWriter.print("<input type='hidden' id=\""+nr+"\" name='numerId' value='"+film[i][0]+"' />");

         }

这是javascript中的代码:

var test2=[];
var test3=[];
var myVideoTab= new Array();
for(i = 1; i < size; i++){
test2[i]='id'+i;
test3[i]=document.getElementById(test2[i]).value;
myVideoTab[i]= document.getElementById(test3[i]);
setTimeout(function () {myVideoTab[i].Play();}, 1000); //in this line is error

这是错误:未捕获的TypeError:无法读取未定义的属性“Play”。 如果我设置

   myVideoTab1= document.getElementById(test3[i]);
   setTimeout(function () {myVideoTab1.Play();}, 1000);

它工作但只有一个视频播放

1 个答案:

答案 0 :(得分:1)

问题是,到代码运行时,i已经是size+1,这是您不具备的索引。

最快的解决方法是将其包含在匿名函数调用中,并将i作为参数:

function(val){setTimeout(function () {myVideoTab[val].Play();}, 1000)}(i);

这将确保使用i的当前值(将参数名称更改为val,以便于理解)。


这个简单的例子显示了每次迭代的好(包装)和坏(未包装)值的值:

&#13;
&#13;
var div = document.getElementById('r');
var output = "";
for (var i = 0; i < 10; i++) {
   setTimeout(function() {
     output += '<p class="u">unwrapped i is ' + i + '</p>';
     div.innerHTML = output;
   }, 1000);
   (function(val){
     setTimeout(function() {
       output += '<p>wrapped i is ' + val + '</p>';
       div.innerHTML = output;
     }, 1000)
   }(i));
}
&#13;
p {
  color: green;
  }
p.u {
  color: red;
  }
&#13;
<div id="r"></div>
&#13;
&#13;
&#13;