У Вас неправильная логика
sprite.onload не может быть внутри draw
наоборот из sprite.onload надо draw вызывать
var sprite = new Image();
sprite.onload=function(e){draw('text')};
sprite.src=....
function draw(){ctx.drawImage...}
а потом когда будете кнопкой вызывать картинка уже загружена будет в прелоадер
<input type=button onclick="draw('tratata')">