繁体   English   中英

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

[英]javascript / jquery - setting (this) in a function

大家好。 基本上,我需要在函数中使用“(this)”来对应此选择:

$(".widget .portfolio img")

但是我想要运行此函数的替代方法,一种是在单击时运行,另一种是在间隔时间内运行,如下所示:

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"));
        ...

我想我只需要在函数中添加一些简单的内容...有什么想法吗? 提前致谢 :)

您可以使用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()将调用映射到始终位于调用对象上下文中的示例

传递引用(或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);
function cycle(me) 
{ 
  var poo = me.attr("id"); 
  $(".poo").html(poo); 
}; 

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM