Skip to content

Commit 69e9304

Browse files
committed
fix #377: error on nested onchange
1 parent ac02518 commit 69e9304

File tree

1 file changed

+9
-2
lines changed

1 file changed

+9
-2
lines changed

pywebio/io_ctrl.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -312,14 +312,21 @@ def trigger_onchange(event_data, onchange_funcs):
312312
name = event_data['name']
313313
onchange_func = onchange_funcs[name]
314314

315+
# save current input name to session, so that the `input_update()` function can get it
315316
task_id = get_current_task_id()
316-
get_current_session().internal_save['onchange_trigger-' + task_id] = name # used in `pywebio.input.input_update()`
317+
onchange_trigger_key = 'onchange_trigger-' + task_id
318+
previous_name = get_current_session().internal_save.get(onchange_trigger_key)
319+
get_current_session().internal_save[onchange_trigger_key] = name # used in `pywebio.input.input_update()`
320+
317321
try:
318322
onchange_func(event_data['value'])
319323
except Exception as e:
320324
logger.warning('Get %r in onchange function for name:"%s"', e, name)
321325
finally:
322-
del get_current_session().internal_save['onchange_trigger-' + task_id]
326+
if previous_name is None:
327+
get_current_session().internal_save.pop(onchange_trigger_key, None)
328+
else:
329+
get_current_session().internal_save[onchange_trigger_key] = previous_name
323330

324331

325332
@chose_impl

0 commit comments

Comments
 (0)