Ce n'est pas aussi facile à faire qu'on pourrait l'imaginer, et certains navigateurs empêchent automatiquement le déclenchement de téléchargements de fichiers à partir d'éléments non fiables pour des raisons de sécurité.
Je recommande d'utiliser un plugin de téléchargement de fichiers tiers, tel que Plupload ou de simuler un bouton personnalisé en utilisant l'amélioration progressive (bouton de téléchargement de fichiers invisible, avec un graphique personnalisé en dessous (bien sûr, ce n'est pas la solution la plus flexible) comme décrit ici :
http://filamentgroup.com/lab/jquery_custom_file_input_book_designing_with_progressive_enhancement/
Plupload events vous permet de vous connecter aux événements qui peuvent se produire pendant le téléchargement de fichiers par ajax, et de faire des choses avec les informations de téléchargement. Voir cette page pour des exemples de données de réponse que vous pourriez obtenir :
http://www.plupload.com/example_events.php
Vous pouvez obtenir des données de réponse comme ceci :
id=p16in5el9ne2fc1rd08120in081
name=denim.png
size=20623
loaded=20623
percent=100
status=DONE
target_name=p16in5el9ne2fc1rd08120in081.png
Et bien sûr, vous pouvez modifier ce que le serveur renvoie en cas de téléchargement réussi, afin de pouvoir obtenir l'URL absolue complète de l'image téléchargée.
Une fois que vous avez ces données, vous pouvez vous y connecter et changer l'image en faisant quelque chose comme ceci (avec jQuery) :
// Called when a file has finished uploading
FileUploaded: function(up, file, info) {
$('#id_of_the_image').attr('src', 'uploads/' + file.target_name);
}