Javascript 发送setTimeout名称、元素id和时间作为函数的参数?
这可能是非常明显的,但我已经四处搜索并尝试了一些方法,但无法使其工作,所以也许有人可以在这里指出我的错误 我有一个setTimeout,我将反复使用它(我知道有setinterval,但我实际上需要控制计时器何时启动和停止,以及每次是否再次启动)。无论如何,我想如果我一遍又一遍地写它,我应该能够使用一个函数并将所需的参数传递给它Javascript 发送setTimeout名称、元素id和时间作为函数的参数?,javascript,jquery,html,settimeout,Javascript,Jquery,Html,Settimeout,这可能是非常明显的,但我已经四处搜索并尝试了一些方法,但无法使其工作,所以也许有人可以在这里指出我的错误 我有一个setTimeout,我将反复使用它(我知道有setinterval,但我实际上需要控制计时器何时启动和停止,以及每次是否再次启动)。无论如何,我想如果我一遍又一遍地写它,我应该能够使用一个函数并将所需的参数传递给它 if ($('#selectRole').val() === 'Dispatch') { //show Add Notes button
if ($('#selectRole').val() === 'Dispatch') {
//show Add Notes button
var funcAddNotesTimer = function(timerName,buttonName, timeToHide) {
console.log(timerName);
console.log(timeToHide / 1000);
timerName = setTimeout(function() {
$('buttonName').show();
}, timeToHide);
};
funcAddNotesTimer('addNotesTimer', '#disAddNotes', 30000);
我正在尝试将计时器函数名设置为“addNotesTimer”,当计时器启动时,我希望显示id为#disAddNotes的按钮,并希望计时器运行30000毫秒
对我来说,我所拥有的看起来是正确的,但是我从来没有在我的控制台日志中得到任何东西,所以我认为它甚至没有进入函数
我在这里做错了什么?我认为不可能使用
字符串
参数作为设置超时
以下是你如何处理它的方法
// var timer = null; // dont really need that
var funcAddNotesTimer = function(buttonName, timeToHide) {
var timerName = setTimeout(function() {
//$('buttonName').show();
$(buttonName).show(); // buttonName is already a string so no need to add quotes around it.
}, timeToHide);
return timerName;
};
if ($('#selectRole').val() === 'Dispatch') {
var timer = funcAddNotesTimer('#disAddNotes', 30000);
// do something with timer
}
当您在控制台中看不到任何输出时,原因一定是其他原因(例如,代码末尾缺少一个括号) 要使用动态名称设置变量,请使用下标表示法:
window[timerName] = setTimeout(/**/);
它将设置一个名为addNotesTimer
的全局变量
当您当前这样做时,您只是覆盖传递给函数的参数
总结:
if ($('#selectRole').val() === 'Dispatch') {
//show Add Notes button
var funcAddNotesTimer = function(timerName,buttonName, timeToHide) {
console.log(timerName);
console.log(timeToHide / 1000);
window[timerName] = setTimeout(function() {
$(buttonName).show();
}, timeToHide);
};
funcAddNotesTimer('addNotesTimer', '#disAddNotes', 5000);
}
不要在语句内部创建函数,而要在语句外部创建函数。从我所看到的情况来看,几乎没有问题。我可以像传递变量一样传递引用名称-我假设
addNotesTimer
是保存计时器引用的变量名$(buttonName).show()
buttonName是一个变量,因此不要将其用作字符串文本…但是,没有任何一个变量会导致控制台无法打印任何timerName
仍然无法工作。。。。计时器引用更新为本地参数timerName
,但这不会反映在传递的timer
referenceOh true中,感谢spot@ArunPJohny。更新了我的答案-与我的评论相同:)也没有说明为什么console语句不适用于OpInterest,运行console中提供的有问题的代码(没有if条件)是否将这些控制台行显示为addNotesTimer
和30
@varinder如果将函数作为属性附加到窗口,则可以使用字符串作为函数名。