установка переменной для использования с функцией jquery click - PullRequest
1 голос
/ 21 октября 2010

Мои извинения, если это просто еще один вопрос, который задают снова и снова. Я нашел несколько похожих вопросов, примеры просто не дали мне того, где я должен быть. Это похоже на jQuery Closures, Loops и Events .

$('a.highslide').each(function() {
  hsGroup = $(this).attr("rel");

  if(hsGroup.length > 1){
     hsGroup = hsGroup.replace(/\s/g , "-");     
  }    

  this.onclick = function() {
    return hs.expand(this, { slideshowGroup: hsGroup });

  }
});

этот код устанавливает щелчок, который запускает всплывающее окно. Я добавил свойство slideshowGroup и код hsGroup над ним, который извлекает содержимое атрибута Rel, чтобы определить группу каждого из них. Проблема, как вы можете сразу видеть, заключается в том, что содержимое hsGroup не является локальным по отношению к этой дополнительной функции. Таким образом, во время выполнения его значение всегда одинаково для каждой ссылки, к которой применяется. Я просмотрел несколько примеров закрытия, но пока не смог заставить их работать в моей ситуации.

Спасибо

Ответы [ 2 ]

5 голосов
/ 21 октября 2010

Вам просто нужно var, чтобы сделать это для каждой ссылки, например:

$('a.highslide').each(function() {
  var hsGroup = $(this).attr("rel");
  //^ -- add this

  if(hsGroup.length > 1){
     hsGroup = hsGroup.replace(/\s/g , "-");     
  }    

  this.onclick = function() {
    return hs.expand(this, { slideshowGroup: hsGroup });

  }
});

Без var у вас есть одна глобальная hsGroup переменная, которая повторно используетсядля каждого цикла и заканчивая тем же самым последним значением, используемым в каждом клике.

Или просто выполните замену во время события click, например:

$('a.highslide').click(function() {
  var hsGroup = $(this).attr("rel");
  if (hsGroup.length > 1) hsGroup = hsGroup.replace(/\s/g , "-");    
  return hs.expand(this, { slideshowGroup: hsGroup });
});
4 голосов
/ 21 октября 2010

Это потому, что вы не объявляете hsGroup как локальное, вы пропускаете var:

var hsGroup = $(this).attr("rel");

В противном случае, hsGroup является глобальным и поэтому устанавливается на значение последней итерации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...