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:
parent
501f32b9ae
commit
87725ee3d9
@ -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 %}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user