Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.05.2015, 18:24
Аспирант
Отправить личное сообщение для inflexible Посмотреть профиль Найти все сообщения от inflexible
 
Регистрация: 25.05.2015
Сообщений: 34

Неправильно срабатывает обработчик событий
В общем не могу разобраться в чем косяк!
В общем при первом нажатии medals.click все работает отлично, при втором medals.click неправильно работает обработчик rightButtonScroll.click... срабатывает сразу несколько раз и выдает последний результат!

var medals = $(".medalBlock a");
var sportsmen = [medalists.Gold, medalists.Silver, medalists.Bronse];
var num, medalNum;

medals.click(function() {
    
    num = 0;

    if (this === medals[0] ) { medalNum = 0; }
    if (this === medals[1] ) { medalNum = 1; }
    if (this === medals[2] ) { medalNum = 2; }
  
    rotateSportsmenList();

    rightButtonScroll.click(function() {     
        if ((num+1) < sportsmen[medalNum].length) { 
            num++; 
            rotateSportsmenList();
        }
    });

    leftButtonScroll.click(function() {     
        if (num > 0) { 
            num--; 
            rotateSportsmenList(); 
        }
    });

    function rotateSportsmenList(){
        statusScroll.text(num+1 + " из " + sportsmen[medalNum].length);
        nameSportsmenBlock.html(sportsmen[medalNum][num].name);
        $(".sportsmenImgBlock a").css({background: "url("+sportsmen[medalNum][num].imagesURL +") no-repeat"});
        sportsmenBiographyBlock.text(sportsmen[medalNum][num].biography);
    }

});



кстати, раз уже спрашиваю, то почему-то не работает конструкция для данного когда:

for (var i = 0; i < medals.length; i++) {
    (function(k) {
        medals[k].click(function(e) {
         
        });
    })(i);
}


только давайте без мата, и без тупых советов типа "иди еще раз прочитай главу о замыканиях"! если нету желания помочь - то иди себе мимо с Богом!)
Ответить с цитированием
  #2 (permalink)  
Старый 25.05.2015, 20:32
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 31,150

medals.click при каждом клике добавляет клики для rightButtonScroll и прочего --- строка 36 должна быть в строке 14;
Сообщение от inflexible
кстати, раз уже спрашиваю, то почему-то не работает конструкция для данного когда:
потому что у элемента нет свойства click , а есть onclick

если нужно jquery то medals.eq(i).click или лучше через each а не через for тогда никаких замыканий ненужно
Ответить с цитированием
  #3 (permalink)  
Старый 25.05.2015, 20:53
Аватар для Leon-on12
Аспирант
Отправить личное сообщение для Leon-on12 Посмотреть профиль Найти все сообщения от Leon-on12
 
Регистрация: 07.04.2015
Сообщений: 65

Вот так работает. Что у тебя там не так, разбираться лень.

for (var i = 0; i < medals.length; i++) { (function(){
     medals[i].onclick= (function(){
          alert(this);
     });
};


А в первой части, не могу понять зачем тебе обработчик событий именно внутри этой большой функции. Вынеси их наружу.
Да и rotateSportsmenList() тоже можно вынести.
Ответить с цитированием
  #4 (permalink)  
Старый 26.05.2015, 00:06
Аспирант
Отправить личное сообщение для inflexible Посмотреть профиль Найти все сообщения от inflexible
 
Регистрация: 25.05.2015
Сообщений: 34

Сообщение от рони Посмотреть сообщение
medals.click при каждом клике добавляет клики для rightButtonScroll и прочего --- строка 36 должна быть в строке 14;
блин, благодарка, все правильно ты сказал!) вспомнил, кажись пузырьком называется штука!) вынес все как ты посоветовал и норм работает!)

p.s. всем спасибо, что не прошли мимо!)
Ответить с цитированием
  #5 (permalink)  
Старый 27.05.2015, 19:59
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,719

Сообщение от inflexible
иди еще раз прочитай главу о замыканиях
Все правильно вам советовали. Надо еще раз завернуть все медали в div который и контролировать и тогда не придется развешивать на все медали функцию в цикле. Навскидку останется процентов 10 от этой тряхомудии.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
обработчик событий для динамически добавленных элементов Tecvid Events/DOM/Window 28 25.06.2018 14:49
Обработчик срабатывает сразу же после установки vuler Общие вопросы Javascript 5 24.03.2015 15:17
jQuery - не срабатывает обработчик в change() senglory jQuery 1 28.12.2012 02:04
Неправильно срабатывает onmouseout Slavenin Events/DOM/Window 6 27.07.2011 14:52
Обработчик событий kucaeva Общие вопросы Javascript 2 10.12.2010 16:42