Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/470.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 发送setTimeout名称、元素id和时间作为函数的参数?_Javascript_Jquery_Html_Settimeout - Fatal编程技术网

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

Javascript 发送setTimeout名称、元素id和时间作为函数的参数?,javascript,jquery,html,settimeout,Javascript,Jquery,Html,Settimeout,这可能是非常明显的,但我已经四处搜索并尝试了一些方法,但无法使其工作,所以也许有人可以在这里指出我的错误 我有一个setTimeout,我将反复使用它(我知道有setinterval,但我实际上需要控制计时器何时启动和停止,以及每次是否再次启动)。无论如何,我想如果我一遍又一遍地写它,我应该能够使用一个函数并将所需的参数传递给它 if ($('#selectRole').val() === 'Dispatch') { //show Add Notes button

这可能是非常明显的,但我已经四处搜索并尝试了一些方法,但无法使其工作,所以也许有人可以在这里指出我的错误

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

对我来说,我所拥有的看起来是正确的,但是我从来没有在我的控制台日志中得到任何东西,所以我认为它甚至没有进入函数


我在这里做错了什么?

我认为不可能使用
字符串
参数作为
设置超时

以下是你如何处理它的方法

// 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如果将函数作为属性附加到窗口,则可以使用字符串作为函数名。