я бы какой-нибудь такой монстр собрал:
var TNextStepButton = /** @class */ (function () {
function TNextStepButton(options) {
this.extend(this, options);
this._element['__obj'] = this;
this._initCheckboxes();
this.isChecked();
}
Object.defineProperty(TNextStepButton.prototype, "enabled", {
/**
* Тут, собственно, производим движения с кнопкой "далее".
*/
set: function (val) {
/**
* Кстати, у HTMLAnchorElement'а нет в прототипе disabled.
* Тут надо выдумывать что-то, или вместо <a> делать <button>
*/
this._element.disabled = !val;
console.log(val, this._element.disabled);
},
enumerable: true,
configurable: true
});
/**
* После каждого изменения в любом из чекбоксов, проверяем их состояние,
* результат передаётся в сеттер элемента кнопки.
*/
TNextStepButton.prototype.isChecked = function () {
var ret = 0;
[].map.call(this.inputs, function (_chb) {
ret = ret | _chb.checked;
});
this.enabled = ret;
return ret;
};
/**
* Инициализация событий чекбоксов
*/
TNextStepButton.prototype._initCheckboxes = function () {
var _that = this;
[].map.call(_that.inputs, function (_chb) {
var _click = _chb.addEventListener('change', function (ev) {
_that.isChecked();
});
});
};
Object.defineProperty(TNextStepButton.prototype, "inputs", {
/**
* Возвращает все чекбоксы из указанного контейнера
*/
get: function () {
return document.querySelectorAll(this.inputsContainerSelector + ' input[type="checkbox"]');
},
enumerable: true,
configurable: true
});
/**
* Некоторое подобие extend'а
*/
TNextStepButton.prototype.extend = function (first, second) {
for (var id in second) {
first[id] = second[id];
}
return first;
};
return TNextStepButton;
}());
document.addEventListener('DOMContentLoaded', function () {
/**
* По загрузке контента создаём объект у кнопки "далее"
*/
var button = new TNextStepButton({
_element: document.getElementById('nextstep'),
inputsContainerSelector: '.checkboxes',
});
});