Hola:
Es que con los datos que das es difícil...
Si el alert sirve para que funcione, debe tratarse de un problema de retardo... tal vez no ha llegado a crearse el nuevo elemento (dices que lo creas dinámicamente...)
En vez de un alert, prueba poner la última instrucción con un retardito... o mejor, llamar a la función con ese reatardo... donde tengas: calcular_precio(), pon:
setTimeout("calcular_precio()", 100)
Es por probar...
Saludos