Da war noch ein Fehler drin: Eventlistener wurde mehrfach registriert wenn man mehrere Instanzen anlegt. Hier die korrigierte Klasse:
Code
class StylableSelect {
static isRegistered = false;
constructor(selector) {
this.selector = selector;
if (!StylableSelect.isRegistered) {
StylableSelect.isRegistered = true;
window.addEventListener('click', event => {
if (event.target.classList.contains('stylable-select-out')) {
console.log('out clicked')
event.target.closest('.stylable-select')
.querySelector('.stylable-select-options')
.classList.toggle('hidden');
}
const
lbl = event.target.closest('label:not(.stylable-select-out)');
let select = null;
if (lbl) select = lbl.closest('.stylable-select');
if (select) {
const
selectedLabel = select.querySelector('label.selected');
if (selectedLabel) selectedLabel.classList.remove('selected')
lbl.classList.add('selected');
select.querySelector('input[name]').value
= select.querySelector('label.selected input').value;
select.querySelector('.stylable-select-out span').textContent
= select.querySelector('label.selected').textContent;
select.querySelector('.stylable-select-options').classList.add('hidden');
}
});
}
}
getValueAndText() {
const
out = document.querySelector(this.selector).querySelector('.stylable-select-out'),
text = out.querySelector('span').textContent,
value = out.querySelector('input').value;
return { value: value, text: text };
}
}
Alles anzeigen