Juste un petit post rapide parce que ça m'a pris pas mal de temps à trouver d'où venait le problème.
Si vous utilisez Dojo, vous essayez peut être d'améliorer les performances en ne passant pas par leur parser (qui analyse tout le DOM) mais en instanciant directement les widgets.
Je suis tombé récemment sur un problème avec des dijit.form.CurrencyTextBox (mais j'imagine qu'il est également valable pour les NumberTextBox) que j'initialise à partir d'input qui ont une valeur. Le widget résultant ne mettait pas en forme la valeur du contrôle avant que l'on lui donne le focus et qu'on le quitte. Pire encore, si la locale n'était pas en-us on se retrouvait avec un message d'erreur "valeur invalide" (en raison de l'utilisation du point décimal à la place de la virgule. Par contre, le même input avec un dojoType passé à dojo.parser.instantiate s'affichait correctement du premier coup.
La solution est toute simple, il suffit de forcer la conversion de la valeur en Number :
<code>
var field = new dijit.form.NumberTextBox({
value: Number(i.value)
}, i);
field.startup();
</code>
Si jamais i.value n'est pas un nombre ou est vide, Number(i.value) renverra NaN qui est très bien accepté par le constructeur. En espérant vous avoir fait gagner un peu de temps...