Показать сообщение отдельно
  #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.
Ответить с цитированием