javascript / jquery - установка (это) в функцию - PullRequest
2 голосов
/ 21 июня 2010

Привет всем. По сути, мне нужно, чтобы «(это)» в моей функции соответствовало этому выбору:

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

Я думаю, мне просто нужно что-то в функции ... есть идеи? Заранее спасибо:)

Ответы [ 3 ]

3 голосов
/ 21 июня 2010

Вы можете использовать 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 голос
/ 21 июня 2010

передать ссылку (или селектор 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);
0 голосов
/ 21 июня 2010
function cycle(me) 
{ 
  var poo = me.attr("id"); 
  $(".poo").html(poo); 
}; 

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

setInterval('cycle($(".widget .portfolio img"))', 4000);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...