@@ -69,7 +69,7 @@ const root_event_handles = new Set();
69
69
* Add the function on the __bind attribute of the element
70
70
* This allow to handle form's reset correctly
71
71
* @param {Element } dom
72
- * @param {()=>void } fn
72
+ * @param {()=>void } fn
73
73
*/
74
74
function binds ( dom , fn ) {
75
75
// @ts -ignore
@@ -78,7 +78,10 @@ function binds(dom, fn) {
78
78
// @ts -ignore
79
79
const prev = dom . __bind ;
80
80
// @ts -ignore
81
- dom . __bind = ( ) => { prev ( ) ; fn ( ) ; }
81
+ dom . __bind = ( ) => {
82
+ prev ( ) ;
83
+ fn ( ) ;
84
+ } ;
82
85
} else {
83
86
// @ts -ignore
84
87
dom . __bind = fn ;
@@ -939,16 +942,19 @@ export function selected(dom) {
939
942
* @returns {void }
940
943
*/
941
944
export function bind_value ( dom , get_value , update ) {
942
- dom . addEventListener ( 'input' , binds ( dom , ( ) => {
943
- // @ts -ignore
944
- let value = dom . value ;
945
- // @ts -ignore
946
- const type = dom . type ;
947
- if ( type === 'number' || type === 'range' ) {
948
- value = value === '' ? null : + value ;
949
- }
950
- update ( value ) ;
951
- } ) ) ;
945
+ dom . addEventListener (
946
+ 'input' ,
947
+ binds ( dom , ( ) => {
948
+ // @ts -ignore
949
+ let value = dom . value ;
950
+ // @ts -ignore
951
+ const type = dom . type ;
952
+ if ( type === 'number' || type === 'range' ) {
953
+ value = value === '' ? null : + value ;
954
+ }
955
+ update ( value ) ;
956
+ } )
957
+ ) ;
952
958
render_effect ( ( ) => {
953
959
const value = get_value ( ) ;
954
960
const coerced_value = value == null ? null : value + '' ;
@@ -967,18 +973,21 @@ export function bind_value(dom, get_value, update) {
967
973
*/
968
974
export function bind_select_value ( dom , get_value , update ) {
969
975
let mounting = true ;
970
- dom . addEventListener ( 'change' , binds ( dom , ( ) => {
971
- /** @type {unknown } */
972
- let value ;
973
- if ( dom . multiple ) {
974
- value = [ ] . map . call ( dom . querySelectorAll ( ':checked' ) , get_option_value ) ;
975
- } else {
976
- /** @type {HTMLOptionElement | null } */
977
- const selected_option = dom . querySelector ( ':checked' ) ;
978
- value = selected_option && get_option_value ( selected_option ) ;
979
- }
980
- update ( value ) ;
981
- } ) ) ;
976
+ dom . addEventListener (
977
+ 'change' ,
978
+ binds ( dom , ( ) => {
979
+ /** @type {unknown } */
980
+ let value ;
981
+ if ( dom . multiple ) {
982
+ value = [ ] . map . call ( dom . querySelectorAll ( ':checked' ) , get_option_value ) ;
983
+ } else {
984
+ /** @type {HTMLOptionElement | null } */
985
+ const selected_option = dom . querySelector ( ':checked' ) ;
986
+ value = selected_option && get_option_value ( selected_option ) ;
987
+ }
988
+ update ( value ) ;
989
+ } )
990
+ ) ;
982
991
// Needs to be an effect, not a render_effect, so that in case of each loops the logic runs after the each block has updated
983
992
effect ( ( ) => {
984
993
let value = get_value ( ) ;
@@ -1069,23 +1078,27 @@ export function bind_group(group, group_index, dom, get_value, update) {
1069
1078
}
1070
1079
}
1071
1080
binding_group . push ( dom ) ;
1072
- dom . addEventListener ( 'change' , binds ( dom , ( ) => {
1073
- // @ts -ignore
1074
- let value = dom . __value ;
1075
- if ( is_checkbox ) {
1076
- value = get_binding_group_value ( binding_group , value , dom . checked ) ;
1077
- } else if ( ! dom . checked ) {
1078
- value = null ;
1079
- if ( dom . form && dom . name ) {
1080
- const item = dom . form . elements . namedItem ( dom . name ) ;
1081
- if ( item ) {
1082
- // @ts -ignore
1083
- value = item . value ;
1081
+ dom . addEventListener (
1082
+ 'change' ,
1083
+ binds ( dom , ( ) => {
1084
+ // @ts -ignore
1085
+ let value = dom . __value ;
1086
+ if ( is_checkbox ) {
1087
+ value = get_binding_group_value ( binding_group , value , dom . checked ) ;
1088
+ } else if ( ! dom . checked ) {
1089
+ // on form reset, we need to check selected item
1090
+ value = null ;
1091
+ if ( dom . form && dom . name ) {
1092
+ const item = dom . form . elements . namedItem ( dom . name ) ;
1093
+ if ( item ) {
1094
+ // @ts -ignore
1095
+ value = item . value ;
1096
+ }
1084
1097
}
1085
1098
}
1086
- }
1087
- update ( value ) ;
1088
- } ) ) ;
1099
+ update ( value ) ;
1100
+ } )
1101
+ ) ;
1089
1102
render_effect ( ( ) => {
1090
1103
let value = get_value ( ) ;
1091
1104
if ( is_checkbox ) {
@@ -1114,10 +1127,13 @@ export function bind_group(group, group_index, dom, get_value, update) {
1114
1127
* @returns {void }
1115
1128
*/
1116
1129
export function bind_checked ( dom , get_value , update ) {
1117
- dom . addEventListener ( 'change' , binds ( dom , ( ) => {
1118
- const value = dom . checked ;
1119
- update ( value ) ;
1120
- } ) ) ;
1130
+ dom . addEventListener (
1131
+ 'change' ,
1132
+ binds ( dom , ( ) => {
1133
+ const value = dom . checked ;
1134
+ update ( value ) ;
1135
+ } )
1136
+ ) ;
1121
1137
// eslint-disable-next-line eqeqeq
1122
1138
if ( get_value ( ) == undefined ) {
1123
1139
update ( false ) ;
0 commit comments