Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.06.2014, 14:29
Аспирант
Отправить личное сообщение для xmlns Посмотреть профиль Найти все сообщения от xmlns
 
Регистрация: 30.07.2013
Сообщений: 47

Инициализация в цикле
Добрый день.
Есть объект:
var data = {
    Dashes: ["dashes", true, function(tr)
    {
         var isValid = true, cells = tr.find("td");
         cells.each(function() { if($(this).text() !== '—' && $(this).text() !== '') { return isValid = false; } });
         return isValid;
    }],
         Matched: ["matched", true, function(tr)
         {
              var isValid = true, cells = tr.find("td"), text = cells.last().text();
              cells.each(function() { if($(this).text() !== '' && ($(this).text() === '—' || $(this).text() !== text)) { return isValid = false; } });
                return isValid;
            }],
         Mismatched: ["mismatched", true, function(tr)
         {
              var isValid = false, cells = tr.find("td"), text = cells.last().text();
              cells.each(function() { if($(this).text() !== text && $(this).text() !== '') { isValid = true; return false; } });
              return isValid;
         }]
};


И есть код для инициализации в цикле:
for(var key in data)
                {
                    $("body").on("click", "#clb-hide" + key, function()
                    {
                        if($("#clb-compareTable tbody tr").is(".clb-ct-" + data[key][0])) $("#clb-compareTable tbody tr.clb-ct-" + data[key][0]).hide();
                        else
                        {
                            $("#clb-compareTable tbody tr:not([class])").each(function() 
                            {
                                if(data[key][2]($(this)))
                                    $(this).addClass("clb-ct-" + data[key][0]).hide();
                            });
                        }
                        $("#clb-hide" + key).hide(0,function() { $("#clb-show" + key).show(); alert($("#clb-show" + key).attr("id")); });
                        isHidden = true;
                        return false;
                    });
                    $("body").on("click", "#clb-show" + key, function()
                    {
                        $("#clb-compareTable tbody tr.clb-ct-" + data[key][0]).show();
                        $("#clb-show" + key).hide(0,function() { $("#clb-hide" + key).show(); });
                        return false;
                    });
                }

Сделано, чтобы не городить однотипный три раза. Смысл вроде ясен: на каждую из трех кнопок повесить СВОЙ обработчик, который выполнить некоторые действия, указанные для ДАННОЙ кнопки.

На самом деле получается какое-то гониво. Вместо того, чтобы выполнялось действие у данной нажатой кнопки, выполняется действие для последней кнопки (она у меня последняя в объекте data). Чтобы нужно сделать, чтобы инициализация в цикле была верной?
Или все-таки придется писать три однотипных кода?

Последний раз редактировалось xmlns, 17.06.2014 в 14:31.
Ответить с цитированием
  #2 (permalink)  
Старый 17.06.2014, 14:40
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,103

xmlns,
http://javascript.ru/basic/closure#p...-ispolzovaniya
Ответить с цитированием
  #3 (permalink)  
Старый 17.06.2014, 15:03
Аспирант
Отправить личное сообщение для xmlns Посмотреть профиль Найти все сообщения от xmlns
 
Регистрация: 30.07.2013
Сообщений: 47

Это все замечательно, но я так и не понял, что у меня конкретно нужно поменять?
У по всякому пихал
return function () {...}(key)
- не получается.
Ответить с цитированием
  #4 (permalink)  
Старый 17.06.2014, 15:05
Аспирант
Отправить личное сообщение для xmlns Посмотреть профиль Найти все сообщения от xmlns
 
Регистрация: 30.07.2013
Сообщений: 47

А такое не работает:
$("body").on("click", "#clb-hide" + key, function()
{
....
}(key));
Ответить с цитированием
  #5 (permalink)  
Старый 17.06.2014, 15:12
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,103

xmlns,
а так?
Object.keys(data).forEach(function (key) {


                    $("body").on("click", "#clb-hide" + key, function()
                    {
                        if($("#clb-compareTable tbody tr").is(".clb-ct-" + data[key][0])) $("#clb-compareTable tbody tr.clb-ct-" + data[key][0]).hide();
                        else
                        {
                            $("#clb-compareTable tbody tr:not([class])").each(function()
                            {
                                if(data[key][2]($(this)))
                                    $(this).addClass("clb-ct-" + data[key][0]).hide();
                            });
                        }
                        $("#clb-hide" + key).hide(0,function() { $("#clb-show" + key).show(); alert($("#clb-show" + key).attr("id")); });
                        isHidden = true;
                        return false;
                    });
                    $("body").on("click", "#clb-show" + key, function()
                    {
                        $("#clb-compareTable tbody tr.clb-ct-" + data[key][0]).show();
                        $("#clb-show" + key).hide(0,function() { $("#clb-hide" + key).show(); });
                        return false;
                    });



});
Ответить с цитированием
  #6 (permalink)  
Старый 17.06.2014, 15:26
Аспирант
Отправить личное сообщение для xmlns Посмотреть профиль Найти все сообщения от xmlns
 
Регистрация: 30.07.2013
Сообщений: 47

Ммм... магия))
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Таймер до требуемой даты в цикле Drugpunker Events/DOM/Window 22 21.03.2014 08:52
Найти все вхождения подстроки, с помощью indexOf в цикле for? dima*** Общие вопросы Javascript 3 18.02.2014 14:04
подвисание при $.ajax() в цикле amt779 jQuery 6 15.05.2013 11:55
popup окно в PHP цикле ryobi522 Общие вопросы Javascript 5 10.02.2012 02:18
Хорошо ли писать var в цикле? балерун Общие вопросы Javascript 24 31.01.2011 11:17