pero si todos tienen el mismo id correspondiente a caja[] sin indice claramente no te los va a detectar como caja[1], caja[2], etc en javascript, de hecho creo que si lo haces así javascript no tomará los valores de todos porque se supone que el id es un identificador Único, luego el getElementById retorna un objeto no así el getElementsByName por ejemplo que retorna un arreglo, dado que distintos elementos de la página pueden tener el mismo nombre.
Ahora una aclaración, cuando analices el formulario en php si tienes varios campos con el mismo valor de NAME los agrupa en arrays no los que tengan el mismo valor de ID. Luego puedes al momento de generar los campos de texto ponerles
Código PHP:
Ver original<?php
for($i=0;i<10;i++) {
?>
<input type="text" id="caja<?= $i ?>" name="caja" />
<?php
}
?>
de este modo el código javascript que pusiste debería funcionar y php debería agrupartelos en un array.
Saludos