$(".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"));
...
我想我只需要一个简单的功能......任何想法?在此先感谢:)
答案 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);