@@ -965,55 +965,63 @@ namespace webcc
965965 if (used_event_listeners.count (" click" ))
966966 {
967967 w.write (" " );
968- w.write (" // Global click event delegation - walks up DOM tree to find handler " );
968+ w.write (" // Global click delegation with bubbling semantics (target -> ancestors) " );
969969 w.write (" document.body.addEventListener('click', (e) => {" );
970970 w.write (" let el = e.target;" );
971+ w.write (" let pushed = false;" );
971972 w.write (" while (el && el !== document.body) {" );
972- w.write (" if (el.dataset.c) { push_event_dom_CLICK(parseInt(el.dataset.c)); _triggerDiscreteUpdate(); return ; }" );
973+ w.write (" if (el.dataset.c) { push_event_dom_CLICK(parseInt(el.dataset.c)); pushed = true ; }" );
973974 w.write (" el = el.parentElement;" );
974975 w.write (" }" );
976+ w.write (" if (pushed) _triggerDiscreteUpdate();" );
975977 w.write (" });" );
976978 }
977979
978980 if (used_event_listeners.count (" input" ))
979981 {
980982 w.write (" " );
981- w.write (" // Global input event delegation - walks up DOM tree to find handler " );
983+ w.write (" // Global input delegation with bubbling semantics (target -> ancestors) " );
982984 w.write (" document.body.addEventListener('input', (e) => {" );
983985 w.write (" let el = e.target;" );
986+ w.write (" let pushed = false;" );
984987 w.write (" while (el && el !== document.body) {" );
985- w.write (" if (el.dataset.i) { push_event_dom_INPUT(parseInt(el.dataset.i), e.target.value || ''); _triggerDiscreteUpdate(); return ; }" );
988+ w.write (" if (el.dataset.i) { push_event_dom_INPUT(parseInt(el.dataset.i), e.target.value || ''); pushed = true ; }" );
986989 w.write (" el = el.parentElement;" );
987990 w.write (" }" );
991+ w.write (" if (pushed) _triggerDiscreteUpdate();" );
988992 w.write (" });" );
989993 }
990994
991995 if (used_event_listeners.count (" change" ))
992996 {
993997 w.write (" " );
994- w.write (" // Global change event delegation - walks up DOM tree to find handler " );
998+ w.write (" // Global change delegation with bubbling semantics (target -> ancestors) " );
995999 w.write (" document.body.addEventListener('change', (e) => {" );
9961000 w.write (" let el = e.target;" );
1001+ w.write (" let pushed = false;" );
9971002 w.write (" while (el && el !== document.body) {" );
9981003 w.write (" if (el.dataset.g) {" );
9991004 w.write (" const val = e.target.type === 'checkbox' ? (e.target.checked ? 'true' : 'false') : (e.target.value || '');" );
1000- w.write (" push_event_dom_CHANGE(parseInt(el.dataset.g), val); _triggerDiscreteUpdate(); return ;" );
1005+ w.write (" push_event_dom_CHANGE(parseInt(el.dataset.g), val); pushed = true ;" );
10011006 w.write (" }" );
10021007 w.write (" el = el.parentElement;" );
10031008 w.write (" }" );
1009+ w.write (" if (pushed) _triggerDiscreteUpdate();" );
10041010 w.write (" });" );
10051011 }
10061012
10071013 if (used_event_listeners.count (" keydown" ))
10081014 {
10091015 w.write (" " );
1010- w.write (" // Global keydown event delegation - walks up DOM tree to find handler " );
1016+ w.write (" // Global keydown delegation with bubbling semantics (target -> ancestors) " );
10111017 w.write (" document.body.addEventListener('keydown', (e) => {" );
10121018 w.write (" let el = e.target;" );
1019+ w.write (" let pushed = false;" );
10131020 w.write (" while (el && el !== document.body) {" );
1014- w.write (" if (el.dataset.k) { push_event_dom_KEYDOWN(parseInt(el.dataset.k), e.keyCode); _triggerDiscreteUpdate(); return ; }" );
1021+ w.write (" if (el.dataset.k) { push_event_dom_KEYDOWN(parseInt(el.dataset.k), e.keyCode); pushed = true ; }" );
10151022 w.write (" el = el.parentElement;" );
10161023 w.write (" }" );
1024+ w.write (" if (pushed) _triggerDiscreteUpdate();" );
10171025 w.write (" });" );
10181026 }
10191027
0 commit comments