listen to programmatic value changes on input element