otro ejemplo utilizando cloneNode y el objeto event para determinar que el evento haya ocurrido en el elemento correcto.
Código:
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN'
'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>
<html xmlns='http://www.w3.org/1999/xhtml'><head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Test Development</title>
<script type='text/javascript'>
self.onload = function(){
var list = document.getElementById("coords"), clone = list.firstChild.cloneNode(true);
document.getElementById('btn').onclick = function(){
list.appendChild(clone.cloneNode(true));
};
list.onclick = function(_evt){
var evt = _evt || event, elem = evt.target || evt.srcElement;
if(/input/i.test(elem.nodeName) && /button/i.test(elem.type))list.removeChild(elem.parentNode);
};
}; //onload;
</script>
<style type='text/css'>
fieldset{
width:24em;
}
li input[type="text"]{
width:6em;
margin-right:2em;
}
</style>
</head>
<body>
<fieldset><legend>Coordenadas:</legend>
<ol id="coords"><li>X: <input type='text' name='coordx[]' /> Y: <input name="coordy[]" type="text" /> <input type="button" value="x" /></li>
</ol></fieldset>
<input type="button" value="Agregar campo" id='btn' />
</body></html>
critica del codigo... no le veo sentido a la funcion setA. practicamente estas haciendo lo mismo que invocar la funcion setAttribute. pero como te decia, con cloneNode no necesitas asignar los atributos que comparten el mismo valor como name.
@edit: en el ejemplo no aparece el campo hidden que te sugeri antes... pues como te comentaba, es mejor que obtengas la longitud del array desde lenguaje servidor, asi obtienes control de ese dato en lugar de indicarlo desde javascript y correr el riesgo de que introduzcan otra informacion antes de enviarse.
Código PHP:
$registros = count($_REQUEST['coordx']);