Brad,

Glad to help, I had to solve a similar problem a few months back.

Regarding the use of the already-present names instead of duplicating them
to IDs, it may be worth the duplication for speed of selectors if that is a
concern.
It wholly depends on how many elements there are in the page - what could be
useful is to give each <tr> an id of "row-304". That way you can use that as
a context for retrieving something by name, e.g. [untested]:

var row = $("#row-"+index);
$('[EMAIL PROTECTED]'], row).val(...);


I'm not certain of how beneficial either of those suggestions would be
speed-wise though, it could be worth testing if important.

--rob


On 6/21/07, Brad Perkins <[EMAIL PROTECTED]> wrote:


Rob,

That is an excellent suggestion. I didn't give actual source in the
example, but it turns out that each of the selects and inputs have
unique numbered "name" attributes already, e.g., name="serial-304".
The numeric part correspond to keys in the db backend. So I can either
add a redundant id attribute or just lookup based on $
('[EMAIL PROTECTED]']) or $('[EMAIL PROTECTED]']).

re: not using .val

For some reason I thought that had been deprecated when .id and .name
were. Thanks for pointing out that it still exists.


On Jun 21, 2:29 am, "Rob Desbois" <[EMAIL PROTECTED]> wrote:
> I would suggest making all of these items related via numeric IDs, you
then
> dispose with having to traverse up and back down the DOM to find the
related
> elements:
>
> <tr>
>
>
>
> >  <td>
> >    <select id="select_1">...</select>
> >  </td>
> >  <td>
> >    <input id="text_1a" type="text" ... />
> >  </td>
> >  <td>
> >    <input id="text_1b" type="text" ... />
> >  </td>
> >  <td>
> >    <input id="text_1c" type="text" ... />
> >  </td>
> >  <td>
> >    ...
> >  </td>
> > </tr>
>
> > // Update 2nd column <input> with new_value.
> > // $(this) is the select in the first row cell.
> > var index = /select_(\d+)/.exec(this.id)[1];  // Get the number from
the
> > ID. There is no checking if it doesn't match.
> > var new_value = $(this).val();
> > $("text_"+index+"a").val(new_value);
>
> Incidentally, as I've used here, the .val() function is a handy shortcut
for
> .attr("val", ...)
>
> I don't know what the speed difference is here but I'm guessing it'll be
> pretty good.
>
> HTH,
> --rob
>
> On 6/21/07, Brad Perkins <[EMAIL PROTECTED]> wrote:
>
>
>
>
>
> > Imagine a table row like this
>
> > <tr>
> >   <td>
> >     <select>...</select>
> >   </td>
> >   <td>
> >     <input type="text" ... />
> >   </td>
> >   <td>
> >     <input type="text" ... />
> >   </td>
> >   <td>
> >     <input type="text" ... />
> >   </td>
> >   <td>
> >     ...
> >   </td>
> > </tr>
>
> > Depending on the select option I need to modify or clear values in the
> > text inputs in the 2nd, 3rd, and 4th cells.
>
> > I find that this code works, but suspect there may be a better way to
> > achieve the same result with less code?
>
> > // Update 2nd column <input> with new_value.
> > // $(this) is the select in the first row cell.
> > $
>
> >
(this).parent('td').parent('tr').children('td').eq(1)children('input').attr("value",new_value);
>
> > Since I'll be updating various cells I suppose this helps, but again
> > suspect there is a better way.
> > var cells = $(this).parent('td').parent('tr').children('td');
> > cells.eq(1).children('input').attr("value",new_value_1);
> > cells.eq(3).children('input').attr("value",new_value_2);
> > cells.eq(4).children('input').attr("value",new_value_3);
>
> > Thanks
>
> > Brad
>
> --
> Rob Desbois
> Eml: [EMAIL PROTECTED]
> Tel: 01452 760631
> Mob: 07946 705987
> "There's a whale there's a whale there's a whale fish" he cried, and the
> whale was in full view.
> ...Then ooh welcome. Ahhh. Ooh mug welcome.




--
Rob Desbois
Eml: [EMAIL PROTECTED]
Tel: 01452 760631
Mob: 07946 705987
"There's a whale there's a whale there's a whale fish" he cried, and the
whale was in full view.
...Then ooh welcome. Ahhh. Ooh mug welcome.

Reply via email to