将变量传递给setTimeout()

时间:2013-08-09 23:30:33

标签: drupal settimeout jcarousel

我在Drupal 7上安装了一个Jcarousel但是当客户端盘旋在箭头上时我需要它水平滚动到两侧。

我一直在尝试将变量传递给Timeout函数,但它似乎不起作用。 在以下代码中,Timeout仅识别:var n = function(){c.next();}; 我需要能够告诉超时使用c.prev()或c.next()向左或向右滚动,具体取决于用户单击的箭头。

var c = this;
var k = 1;
var n = function () {c.next();};

if (k == 1) n = function () {c.prev();};
if (k == 5) n = function () {c.next();};

this.timer = window.setTimeout(n, 500)

我也尝试过这种方式,它也不起作用。

var c = this;
var k = 5;
this.timer = window.setTimeout(function() {c.nextprev(k);}, 500)

...

  nextprev: function(k) {

if (k === 1) return "prev()";
if (k === 5) return "next()";

}

任何帮助或指南都将不胜感激!

1 个答案:

答案 0 :(得分:0)

试试这个,它感觉不是100%正确,但介绍了一些你似乎需要的技术:

c.nextprev立即执行并返回一个将执行真正需要的函数,将c和k捕获为闭包...

c.nextprev = function(k){ 
  return function(){
// I feel like prev and next might be backwards... think about that
    if (k === 1) c.prev();  
    if (k === 5) c.next();
// do nothing if k not 1 nor 5
 }
};

c.timer = window.setTimeout(c.nextprev(k), 500);

...或者可能只是在没有上述所有代码的情况下执行此操作....

这里bind将“this”设置回c。

setTimeout( (k === 5)? c.next.bind(c): ((k === 1)? c.prev.bind(c): function(){} ) );