eso se debe a que como ajax es asíncrono, al momento de asignar los eventos con .on los objetos NO existen en dicho momento en el DOM.
¿solución?: volver a aplicar los eventos luego de que la petición ajax complete, es decir, en el success (y obviamente después de agregarlos al DOM
).
también tienes
jQuery.live() que lo hace de forma automática,
pero muchos desarrolladores insisten en que da más problemas de los que soluciona, depende de ti usarlo, ya estás prevenido, suerte