我的网站上有一部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);
它工作但只有一个视频播放
答案 0 :(得分:1)
问题是,到代码运行时,i
已经是size+1
,这是您不具备的索引。
最快的解决方法是将其包含在匿名函数调用中,并将i
作为参数:
function(val){setTimeout(function () {myVideoTab[val].Play();}, 1000)}(i);
这将确保使用i
的当前值(将参数名称更改为val
,以便于理解)。
这个简单的例子显示了每次迭代的好(包装)和坏(未包装)值的值:
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;