fix(quellen): Submit-Listener direkt binden, nicht via DOMContentLoaded

Folge-Fix zu 501f32b: das body_scripts-Skript läuft am Ende des Body,
da ist DOMContentLoaded oft schon vorbei. Der bisherige Wrapper
``document.addEventListener('DOMContentLoaded', ...)`` wurde dann nie
gefeuert, der Submit-Listener nie gebunden — Suchknopf weiter still.

Lösung: IIFE direkt aufrufen + Idempotenz-Marker (``_quellenBound``)
gegen Doppelbindung.
This commit is contained in:
Dotty Dotter 2026-05-09 01:02:43 +02:00
parent 501f32b9ae
commit 87725ee3d9

View File

@ -380,27 +380,33 @@ async function runSearch(ev) {
return false;
}
// Form-Submit + Filter-Wechsel binden
document.addEventListener('DOMContentLoaded', () => {
// Wichtig: `runSearch` ist async, returnt Promise<false>. Das ist truthy,
// also würde `onsubmit="return runSearch(event)"` das Default-Submit
// NICHT verhindern und der fetch würde mit "Failed to fetch" abbrechen,
// weil die Page navigiert. Stattdessen via addEventListener binden — da
// ist `event.preventDefault()` synchron geblieben, bevor der Promise
// resolvt.
// Form-Submit + Filter-Wechsel binden.
// Direkt im body_scripts-Block — wenn das Script läuft, ist DOMContentLoaded
// häufig schon vorbei (Script kommt am Ende des Body). Daher kein
// addEventListener('DOMContentLoaded', …) als Wrapper.
//
// Wichtig: `runSearch` ist async und returnt Promise<false>. Das ist truthy,
// also würde `onsubmit="return runSearch(event)"` das Default-Submit NICHT
// verhindern, der fetch würde mit "Failed to fetch" abbrechen, weil die Page
// navigiert. Stattdessen über addEventListener binden — da bleibt
// `event.preventDefault()` synchron, bevor der Promise resolvt.
(function bindQuellenSearch() {
const form = document.getElementById('quellen-search-form');
if (form) {
if (form && !form._quellenBound) {
form._quellenBound = true;
form.addEventListener('submit', (ev) => {
ev.preventDefault();
runSearch();
});
}
document.querySelectorAll('input[name="qfilter"]').forEach(r => {
if (r._quellenBound) return;
r._quellenBound = true;
r.addEventListener('change', () => {
const q = (document.getElementById('quellen-q') || {}).value || '';
if (q.trim().length >= 2) runSearch();
});
});
});
})();
</script>
{% endblock %}