发送setTimeout名称,元素id和时间作为函数的参数?

时间:2014-02-04 03:23:03

标签: javascript jquery html settimeout

这可能是非常明显的事情,但我已经四处寻找并尝试了一些事情,并且无法让它发挥作用,所以也许有人可以在这里指出我的错误。

我有一个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毫秒。

对我而言,我看起来是正确的,但我的控制台日志中从未得到任何内容,所以我认为它甚至没有进入该功能。

我在这里做错了什么?

2 个答案:

答案 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);
  }