Инициализация в цикле
Добрый день.
Есть объект: 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). Чтобы нужно сделать, чтобы инициализация в цикле была верной? Или все-таки придется писать три однотипных кода? |
|
Это все замечательно, но я так и не понял, что у меня конкретно нужно поменять?
У по всякому пихал return function () {...}(key)- не получается. |
А такое не работает:
$("body").on("click", "#clb-hide" + key, function() { .... }(key)); |
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; }); }); |
Ммм... магия))
|
Часовой пояс GMT +3, время: 10:08. |