The i
in your function refers to the i
from the loop, which is 6
by the time any of the timeouts fire. You need to add a closure/scope:
for( var i = 0 ; i < 3 ; i++ ) {
(function(){ // create a closure (new scope)
var _i = i; // make a local copy of `i` from the outer scope
t[i] = setTimeout( function(){x.value=_i*2+" seconds"}, i*2000 );
})();
}