Управление checkbox: упростить код (побороть говнокод)
Подскажите, как это упростить без jQuery?
Не получается загнать в цикл :-E Или тут нужно баловаться с замыканиями?
function Id(a){ return document.getElementById(a); }
window.addEventListener('click', function(){
var p1 = Id('p1').checked, // Появляются динамически
p2 = Id('p2').checked, // после выполнения функции
p3 = Id('p3').checked, // Polygon (см. ниже)
p4 = Id('p4').checked;
Id('p1').addEventListener('click', function(){
if (!this.checked){ Polygon(0,p2,p3,p4); }
else { Polygon(1,p2,p3,p4); Id('p1').checked = true; }
Id('p2').checked = p2;
Id('p3').checked = p3;
Id('p4').checked = p4;
}, false);
Id('p2').addEventListener('click', function(){
if (!this.checked){ Polygon(p1,0,p3,p4); }
else { Polygon(p1,1,p3,p4); Id('p2').checked = true; }
Id('p1').checked = p1;
Id('p3').checked = p3;
Id('p4').checked = p4;
}, false);
Id('p3').addEventListener('click', function(){
if (this.checked){ Polygon(p1,p2,1,p4); Id('p3').checked = true; }
else { Polygon(p1,p2,0,p4); }
Id('p1').checked = p1;
Id('p2').checked = p2;
Id('p4').checked = p4;
}, false);
Id('p4').addEventListener('click', function(){
if (this.checked){ Polygon(p1,p2,p3,1); Id('p4').checked = true; }
else { Polygon(p1,p2,p3,0); }
Id('p1').checked = p1;
Id('p2').checked = p2;
Id('p3').checked = p3;
}, false);
}, false);
|
Demath, у тебя внутри обработчика клика (по window) при каждом клике навешивается новая копия обработчика клика по p1-p4. То есть количество обработчиков с каждым кликом увеличивается. Это так задумано?
|
Цитата:
Не разобрался. С load в window внутренние обработчики для p1-p4 не пашут, ввиду, как я понимаю, динамичности p1-p4. |
Цитата:
|
window.addEventListener('click', function(){
var checkboxes = new Array(4);
var states = new Array(4);
var onclick = function() {
var args = new Array(4);
for (var i = 0; i < checkboxes.length; i++) {
var checkbox = checkboxes[i];
if (this === checkbox) {
args[i] = Number(this.checked);
} else {
args[i] = states[i];
checkbox.checked = states[i];
}
}
Polygon.apply(window, args);
};
for (var i = 0; i < checkboxes.length; i++) {
var checkbox = document.getElementById('p' + (i + 1));
checkbox.addEventListener('click', onclick, false);
checkboxes[i] = checkbox;
states[i] = checkbox.checked;
}
}, false);
|
Цитата:
|
| Часовой пояс GMT +3, время: 06:17. |