JQuery .on method is a bit odd. If you just give the field within your table a class name and you state
$('.myFieldClass input').on('change', function)
It will look for only existing fields with that class and only monitor for changes to those, any new ones added later will be ignored.
However if you ALSO give the table a class name you can say
$('.myTableClass').on('change','.myFieldCLass input', function)
And it will always run your function regardless of when the field is added to the form
I am guessing this is because the .on is now running on something that already existed and never changes, and the field definition has been moved inside of the method itself.