我没有设法将i作为参数从onready()传递到setInterval(),所以同时我解析了循环:
function myFunc() {
myWidgets[0].onready = function(){
setInterval( function(){
var pVal = $('#Pv1').text();
myWidgets[0].setValue(pVal);
}, 1000);
};
myWidgets[1].onready = function(){
setInterval( function(){
var pVal = $('#Pv2').text();
myWidgets[1].setValue(pVal);
}, 1000);
};
myWidgets[2].onready = function(){
setInterval( function(){
var pVal = $('#Pv3').text();
myWidgets[2].setValue(pVal);
}, 1000);
};
如何添加i作为参数?
以下不起作用,我在setInterval的内部函数中未定义:
myWidgets[i].onready = function(i){
setInterval( function(i){
var j = i + 1;
var pVal = $('#Pv' + j).text();
myWidgets[i].setValue(pVal);
}, 1000);
};
答案 0 :(得分:2)
您可以使用附件通过i
访问onready
的当前值:
for (var i=0;i<3;i++) {
(function(x){
myWidgets[x].onready = function(){
setInterval(function(){
var pVal = $('#Pv' + (x+1) ).text();
myWidgets[x].setValue(pVal);
}, 1000);
}
})(i);
}
如果没有机箱,它无法使用i
的当前值的原因是它不会使用循环当前步骤的值。而不是那样,它会在i
发生时使用onready
的值,当循环结束时已经达到最大值。
答案 1 :(得分:2)
您可以简单地使用功能附件。
for (var i=0; i<3; i++) {
(function(i) {
myWidgets[i].onready = function() {
setInterval(function(){
var pVal = $('#Pv'+(i+1)).text();
myWidgets[i].setValue(pVal);
}, 1000);
};
})(i);
}
答案 2 :(得分:1)
Try this. The case you are referring to is closure
myWidgets = [];
for(var i = 0; i < 3; i++) {
myWidgets[i].onready = (function(i){
return function(){setInterval( function(){
var pVal = $('#Pv' + (i+1) ).text();
myWidgets[i].setValue(pVal);
console.log(i)
}, 1000);}
})(i);
}
答案 3 :(得分:0)
你可以做什么,但我不知道这是你问题的答案。
for(var i = 0; i < 3; i++) {
myWidgets[i].onready = function(){
setInterval( function(){
var pVal = $('#Pv' + (i+1) ).text();
myWidgets[i].setValue(pVal);
}, 1000);
};
}
它与范围和回调有关。您的解决方案不起作用,因为onReady的回调函数不知道上下文,例如不知道i
。
你可以用jQuery做得更好。 (每个小部件都有一个类myWidget)
$('.myWidget').ready(function () {
var element = $(this); // is the widget of your code.
setTimeout(function () { element.val(element.val()*1 + 1); });
});
答案 4 :(得分:0)
您需要阅读您尝试使用的API的文档。
https://developer.mozilla.org/en-US/docs/Web/API/Window.setInterval 会告诉你:
<强>语法强>
var intervalID = window.setInterval(func, delay[, param1, param2, ...]); var intervalID = window.setInterval(code, delay);
借助@Haneev的答案借用代码,可以写成如下。
我使用j
作为形式参数,以明确表示它没有使用外部作用域中的i
。
for(var i = 0; i < 3; i++) { myWidgets[i].onready = function(){ setInterval( function(j){ var pVal = $('#Pv' + (j+1) ).text(); myWidgets[j].setValue(pVal); }, 1000, i); }; }