Javascript 如何在setTimeout内获取另一个作用域中的变量集?
我有一个定时器功能,我离开这个网站,并试图修改它一点,以满足我的需要。在大多数情况下,它可以按照我的意愿工作,但我无法将参数传递给JavaScript函数 我想使用select来更改id值,然后将该值传递到JQuery加载函数中。有人能告诉我怎么做吗 值得一提的是,当定时器刷新时,选择值需要“粘住”,不能重置 以下是我到目前为止的情况:Javascript 如何在setTimeout内获取另一个作用域中的变量集?,javascript,jquery,Javascript,Jquery,我有一个定时器功能,我离开这个网站,并试图修改它一点,以满足我的需要。在大多数情况下,它可以按照我的意愿工作,但我无法将参数传递给JavaScript函数 我想使用select来更改id值,然后将该值传递到JQuery加载函数中。有人能告诉我怎么做吗 值得一提的是,当定时器刷新时,选择值需要“粘住”,不能重置 以下是我到目前为止的情况: function RecurringTimer(callback, delay) { var timerId, start, remaining = del
function RecurringTimer(callback, delay) {
var timerId, start, remaining = delay;
this.pause = function() {
window.clearTimeout(timerId);
remaining -= new Date() - start;
};
var resume = function() {
start = new Date();
timerId = window.setTimeout(function() {
remaining = delay;
resume();
callback();
},remaining);
};
this.resume = resume;
this.resume();
}
var timer = new RecurringTimer(function() {
$('#id').load('load.asp?id=1'); // The "id" should be "newVal" from JQuery below.
}, 5000);
$(document).ready(function(){
$('#appList').live('change',function(){
var select = $(this);
var newVal = select.val();
if(newVal != ''){
// This is where the var newVal needs to be passed into the JavaScript.
}
});
});
好吧,你可以:
if(newVal != ''){
window.newVal = newVal;
}
并在需要时使用window.newVal
:
$('#id').load('load.asp?id=' + window.newVal);
好吧,你可以:
if(newVal != ''){
window.newVal = newVal;
}
并在需要时使用window.newVal
:
$('#id').load('load.asp?id=' + window.newVal);
试试这个
function RecurringTimer(callback, delay) {
var timerId, start, remaining = delay;
var newValue;
.....
.....
.....
然后在jquery中
if(newVal != ''){
newValue = newVal;
}
然后你可以在你的计时器里引用它
var timer = new RecurringTimer(function() {
$('#id').load('load.asp?id='+newValue); // The "id" should be "newVal" from JQuery below.
}, 5000);
试试这个
function RecurringTimer(callback, delay) {
var timerId, start, remaining = delay;
var newValue;
.....
.....
.....
然后在jquery中
if(newVal != ''){
newValue = newVal;
}
然后你可以在你的计时器里引用它
var timer = new RecurringTimer(function() {
$('#id').load('load.asp?id='+newValue); // The "id" should be "newVal" from JQuery below.
}, 5000);
我在一定程度上推测了你在做什么,所以我做了一些改变来适应,只是为了让它工作。如果你对我为什么要做什么有任何疑问,请告诉我 下面是我的模拟元素,试图匹配代码中的内容:
<div id="selector">
<select id="appList">
<option value="1">Application List - App 1</option>
<option value="2">Application List - App 2</option>
<option value="3">Application List - App 3</option>
<option value="4">Application List - App 4</option>
</select>
</div>
<div id="id"></div>
这些都是将保留在函数范围内的私有变量,以及属于此范围的回调。所以,如果我把它们放在这个“最私密”的范围内,我们可以共享它们。如果在此范围内的其他函数中使用var
调用它们,则它们将只属于该范围。像var select=$(这个)只能在处理程序上的$中访问code>
因此,我想要var newval代码>位于最顶层的私有范围,因此我们可以轻松地共享它。当然,您必须小心,因为有时您不想将其全部推到该范围内(如var-select
)
可能其余的都是不言自明的。您不需要window.setTimeout
,只需要setTimeout
。大多数窗口
-作用域属性和方法不要求您预先添加窗口
。但是,您可能需要这样做来消除本地和全局/窗口
属性的歧义,例如,如果您有一个本地var location=http://...';代码>在范围内。在这种情况下,您需要window.location
来获取该信息
如果你有任何问题,请告诉我
jQuery(function run($){
var $id = $('#id'),
$applist = $('#appList'),
timerId,
start,
remaining = 0,
newval,
select;
$applist.on('change', function(){
var select = $(this);
$id.prepend('<p>App List change event fired</p>');
newval = select.val();
if (newval != '') {
var timer = new RecurringTimer(function() {
$.get('/echo/html/?id=' + newval, callback);
}, 5000);
}
function callback(msg, status){
var report = '<p>Callback returned ' + status +
' for ' + this.url + '.</p>';
$id.prepend(report);
}
});
function RecurringTimer(callback, delay) {
remaining = delay;
$id.prepend('<p>RecurringTimer initialized.</p>');
this.pause = function() {
clearTimeout(timerId);
remaining -= new Date() - start;
};
var resume = function() {
start = new Date();
timerId = setTimeout(function() {
remaining = delay;
resume();
callback();
}, remaining);
};
this.resume = resume;
this.resume();
}
});
jQuery(函数运行($){
变量$id=$('#id'),
$applist=$(“#applist”),
蒂梅丽德,
开始
剩余=0,
纽瓦尔,
选择;
$applist.on('change',function()){
var select=$(此值);
$id.prepend(“应用程序列表更改事件已激发”);
newval=select.val();
如果(newval!=''){
var timer=新的递归计时器(函数(){
$.get('/echo/html/?id='+newval,回调);
}, 5000);
}
函数回调(消息,状态){
var report='回调返回'+status+
'用于'+this.url+'。';
$id.prepend(报告);
}
});
函数递归计时器(回调、延迟){
剩余=延迟;
$id.prepend('RecurringTimer已初始化。');
this.pause=函数(){
清除超时(timerId);
剩余-=新日期()-开始;
};
var resume=函数(){
开始=新日期();
timerId=setTimeout(函数(){
剩余=延迟;
恢复();
回调();
},其余);
};
this.resume=恢复;
这个是resume();
}
});
也有一些CSS,但我认为它不相关,所以我省略了它。我在一定程度上推测了你在做什么,所以我做了一些更改,以适应它的工作。如果你对我为什么要做什么有任何疑问,请告诉我
下面是我的模拟元素,试图匹配代码中的内容:
<div id="selector">
<select id="appList">
<option value="1">Application List - App 1</option>
<option value="2">Application List - App 2</option>
<option value="3">Application List - App 3</option>
<option value="4">Application List - App 4</option>
</select>
</div>
<div id="id"></div>
这些都是将保留在函数范围内的私有变量,以及属于此范围的回调。所以,如果我把它们放在这个“最私密”的范围内,我们可以共享它们。如果在此范围内的其他函数中使用var
调用它们,则它们将只属于该范围。像var select=$(这个)只能在处理程序上的$中访问code>
因此,我想要var newval代码>位于最顶层的私有范围,因此我们可以轻松地共享它。当然,您必须小心,因为有时您不想将其全部推到该范围内(如var-select
)
可能其余的都是不言自明的。您不需要window.setTimeout
,只需要setTimeout
。大多数窗口
-作用域属性和方法不要求您预先添加窗口
。但是,您可能需要这样做来消除本地和全局/窗口
属性的歧义,例如,如果您有一个本地var location=http://...';代码>在范围内。在这种情况下,您需要window.location
来获取该信息
如果你有任何问题,请告诉我
jQuery(function run($){
var $id = $('#id'),
$applist = $('#appList'),
timerId,
start,
remaining = 0,
newval,
select;
$applist.on('change', function(){
var select = $(this);
$id.prepend('<p>App List change event fired</p>');
newval = select.val();
if (newval != '') {
var timer = new RecurringTimer(function() {
$.get('/echo/html/?id=' + newval, callback);
}, 5000);
}
function callback(msg, status){
var report = '<p>Callback returned ' + status +
' for ' + this.url + '.</p>';
$id.prepend(report);
}
});
function RecurringTimer(callback, delay) {
remaining = delay;
$id.prepend('<p>RecurringTimer initialized.</p>');
this.pause = function() {
clearTimeout(timerId);
remaining -= new Date() - start;
};
var resume = function() {
start = new Date();
timerId = setTimeout(function() {
remaining = delay;
resume();
callback();
}, remaining);
};
this.resume = resume;
this.resume();
}
});
jQuery(函数运行($){
变量$id=$('#id'),
$applist=$(“#applist”),
蒂梅丽德,
开始
剩余=0,
纽瓦尔,
选择;
$applist.on('change',function()){
var select=$(此值);
$id.prepend(“应用程序列表更改事件已激发”);
newval=select.val();
如果(newval!=''){
var timer=新的递归计时器(函数(){
$.get('/echo/html/?id='+newval,回调);
}, 5000);
}
函数回调(消息,状态){
var report='回调返回'+status+
'用于'+this.url+'。';
$id.prepend(报告);
}
});
功能