Заменил в двух местах decode("cp437") на decode('cp866').
Закомментировал проверку:
# if fname_str != zinfo.orig_filename:
# raise BadZipFile(
# 'File name in directory %r and header %r differ.'
# % (zinfo.orig_filename, fname))
onChange срабатывает когда пользователь изменяет данные и "покидает" поле ввода. На сколько я понял, это и требовалось в постановке вопроса. Пример работы здесь: learn.javascript.ru/events-change