[英]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.