support input change callback