document.getElementsByName возвращает
список элементов (NodeList), похожий на массив.
нужно так:
<form name="fr">
<input type="text" name="ans1" size="25" value="" />
<input type="text" name="ans2" size="25" value="" />
</form>
<script>
for(var k=1; k<3; k++) {
alert(document.getElementsByName("ans"+k)[0].value);
alert(document.fr['ans'+k].value);
alert(document.getElementsByName("ans"+k).length);
alert(document.fr['ans'+k].length);// ссылается на первый элемент ans+k, так что undefined
}
</script>