Hi,

I'm a recent convert to jQuery, and so far, so great! I'm slowly
moving through my home rolled javascript and migrating it across. One
script which I'm desperate to fix is a generic 'addSubform' routine
which I use to create a new child form (say address form) for a parent
form (say organisation). I use a hidden template, which the routine
clones and then renumbers (The back end is php so I need child forms
inputs to be renumbered so that they end up as PHP arrays; the
template fields are all prefixed with 'tmpl_' so I strip that and
rename the input like so:

theName = theName.replace("tmpl_","");
node.name = prefix+'[' + subformCount + '][' + theName + ']' ;

The original function is roughly this:

function addSubform(childtype) {
 subformCount++;
 var mysubform = document.getElementById(childtype
+'_tmpl').cloneNode(true);
 mysubform.id = '';
 mysubform.style.display = 'block';
 // traverse all of the childnodes of mysubform
 depthTraverse (mysubform, renumberFormField, childtype );
 var insertHere = document.getElementById(childtype+'_insert');
 insertHere.parentNode.insertBefore(mysubform,insertHere);
 return false;
}

As I'm sure you've spotted - the depthTravers is the killer. It works,
but is a pain for subforms with large 'select' popups.

I can see that being able to use a .filter() on inputs and textareas
should make this much quicker ;-) but I'm still at the larval noobie
stage and can't quite see how to do the renaming. I suspect I'm trying
to do too much in one line!

Also - the inputs within the field will have their events attached -
it seems to suggest that I can copy attached events over as well,
using .clone(true) - is this actually the case, and what should I
watch for?

I'm sure that this is the sort of thing that jQuery maestros run off
all the time. Hoping someone point me in the right direction...

Kind regards,

R


(apologies if this appears as a double-post - tried sending it from
Mail.app but seems to have got lost in transit!)

--
Richard Dyce MA (Cantab.) MBCS MIET

Reply via email to