El comportamiento que comentas es perfectamente normal. Los manejadores de eventos en principio se asignan a todos los elementos que están presentes en la página en el momento en el que se asignan. Si cargas contenido con Ajax ese contenido no está presente en la página cuando asocias los manejadores, por lo que simplemnte no se aplican los eventos donde tú necesitas.
Es como si fueras un camarero que quieres poner agua en todas las mesas donde hay clientes. Si más tarde aparecen nuevos clientes en mesas que estaban desocupadas, tendrás que ir y ponerles agua de nuevo.
Afortunadamente en jQuery hay un método que lo soluciona, que pone manejadores a todos los elementos de determinado selector, presentes o futuros. Es el método live(). Básicamente lo tienes que usar en lugar de on().
En este artículo te explican el método live de jQuery.
Espero haberte ayudado.