Почему скрипт не срабатывает при изменении сгенерированных элементов?
Потому, что назначение событий происходит именно в тот момент, когда выполняется код назначения. Нужно либо при добавлении новых элементов, заново им назначать событие, либо для родителя (который добавлен с самого начала) назначить это событие, и передать детишкам.$(".parent-block").on('change', '.z', function(){
            readURL(this);
        });
Почитай про разницу между event binding и event delegation
Ну и вот на закуску 
api.jquery.com/on