这可能是非常明显的事情,但我已经四处寻找并尝试了一些事情,并且无法让它发挥作用,所以也许有人可以在这里指出我的错误。
我有一个setTimeout,我最终会反复使用(我知道有setinterval,但实际上我需要控制定时器启动和停止的时间,以及每次是否再次启动)。无论如何,我想如果我一遍又一遍地写它,我应该能够使用一个函数并传递它所需的参数。
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毫秒。
对我而言,我看起来是正确的,但我的控制台日志中从未得到任何内容,所以我认为它甚至没有进入该功能。
我在这里做错了什么?
答案 0 :(得分:1)
我认为不可能使用string
参数作为setTimeOut
的名称
继承人如何接近它
// 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
}
答案 1 :(得分:0)
当您在控制台中看不到任何输出时,原因必须是其他内容(例如,代码末尾缺少括号)
要使用动态名称设置变量,请使用下标 - 表示法:
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);
}