javascript / jquery - 在函数中设置(this)

时间:2010-06-21 15:56:12

标签: javascript jquery function

嘿所有人。基本上,我需要在我的函数中使用“(this)”来对应这个选择:

$(".widget .portfolio img")

但是我想要运行这个函数的替代方法,一个是cilcked,另一个是间隔,比如:

function cycle()
{
  var poo = $(this).attr("id");
  $(".poo").html(poo);
}

    $(".widget .portfolio img").click(function() {
        cycle();
    });

    setInterval(function() {
        cycle();

    }, 4000);

});

问题是当间隔运行时,函数的“(this)”值是setInterval函数的值 - 但是我希望它是我上面所说的选择...如果我可以做这样的事情,这将是理想的:

setInterval(function() {
        cycle($(".widget .portfolio img"));
        ...

我想我只需要一个简单的功能......任何想法?在此先感谢:)

3 个答案:

答案 0 :(得分:3)

您可以使用call()apply()或使用jQuery 1.4 + jQuery.proxy()

使用call() / apply()(这些之间的唯一区别是将参数传递给函数)。可以使用call / apply调用每个函数,第一个参数是函数调用的上下文(this),第二个/更多参数是函数的参数。 apply()将函数参数作为一个数组,其中call()分别获取它们。

var $imgs = $('.widget .portfolio img'), imgNum = -1;

setInterval(function() {
   imgNum = (imgNum + 1) % $imgs.length;
   // to simulate cycling through the items for instance?

   cycle.call($imgs.get(imgNum)); 
},4000);

jQuery.proxy()

此函数略有不同(并不适用于这种情况),但也可用于设置函数的this上下文。 proxy()所做的是获取一个函数,并返回另一个函数,该函数调用原始函数,强制将其上下文强制为您指定的内容。 $.proxy()使用{{1}}将呼叫映射到始终位于调用对象的上下文中。

答案 1 :(得分:1)

传递引用(或jquery选择器)以循环。

function cycle(obj)
{
  var poo = obj.attr("id");
  $(".poo").html(poo);
}

function cycle(sel)
{
  var poo = $(sel).attr("id");
  $(".poo").html(poo);
}

然后您可以根据自己的喜好使用cycle($(".widget .portfolio img"))cycle(".widget .portfolio img")

我的偏好是传递引用,然后我可以这样做:

$(".widget .portfolio img").click(function() {
        cycle($(this));
    });

    setInterval(function() {
        cycle($(".widget .portfolio img"));

    }, 4000);

答案 2 :(得分:0)

function cycle(me) 
{ 
  var poo = me.attr("id"); 
  $(".poo").html(poo); 
}; 

$(".widget .portfolio img").click(function() { 
        cycle($(this)); 
    }); 

setInterval('cycle($(".widget .portfolio img"))', 4000);