TJ You're right... it's showing the element as undefined but I'm not sure
why..
HTML:
<label id='labowner' for='ajowner'>owner</label>
<input type='radio' name='owner' id='ajowner' value='true'/> True
<input type='radio' name='owner' id='ajowner' value='false'/> False
RESULTS from your code:
if(bOwner)
selectThis = {selectID: 'ajowner', selectValue: 'true' }; // this is
what gets set as bOwner is '1'
else
selectThis = {selectID: 'ajowner', selectValue: 'false' };
var selector = radioTemplate.evaluate(selectThis);
// selectThis = object {selectID="ajowner", selectValue="true"}
var selector = radioTemplate.evaluate(selectThis);
// "input[type=radio][name=ajowner][value=true]"
var list = $$(selector);
// list = []
var element = list[0];
// undefined - throws here!
These work:
$('ajowner').writeAttribute("checked", "checked"); // sets the 'true'
button
$$("input[type=radio][name='owner'][value='false']")[0].writeAttribute("checked",
"checked"); // will set either button
On Mon, Apr 18, 2011 at 3:03 AM, T.J. Crowder <[email protected]>wrote:
> Hi,
>
> > $$(radioTemplate.evaluate(selectThis))[0].writeAttribute("checked",
> > "checked"); // blows up!
>
> The first step is to find out *what part* is blowing up. Break the
> statement up into its component parts:
>
> var selector = radioTemplate.evaluate(selectThis);
> var list = $$(selector);
> var element = list[0];
> element.writeAttribute("checked", "checked");
>
> ...and walk through with a debugger[1] and see what things look like
> at each stage. According to your quoted code, the value of `selector`
> once you've done the `evaluate` _will_ be "input[type=radio]
> [name=owner][value=1]" (see this: [2]). I'm fairly sure templates have
> nothing to do with what's going wrong. (My money is on that selector
> not matching anything, hence indexing into it giving you `undefined`,
> which you're then trying to call a function on. So the question is:
> Why isn't it matching anything.)
>
> [1] http://blog.niftysnippets.org/2011/03/no-excuse.html
> [2] http://jsbin.com/owaqa3
>
> FWIW,
> --
> T.J. Crowder
> Independent Software Engineer
> tj / crowder software / com
> www / crowder software / com
>
>
> On Apr 18, 1:30 am, Phil Petree <[email protected]> wrote:
> > var bOwner = 1;
> > var radioTemplate = new
> > Template('input[type=radio][name=#{selectID}][value=#{selectValue}]');
> > $('ajRecord').value = 1;
> > $('ajacct_id').value = 1;
> > $('ajhoa_id').value = 1;
> > selectThis = {selectID: 'owner', selectValue: bOwner };
> > $$(radioTemplate.evaluate(selectThis))[0].writeAttribute("checked",
> > "checked"); // blows up!
> >
> > // this works but we prefer to use the template for brevity/bandwidth
> sake
> > if(bOwner > 0 )
> > {
> > $('ajowner').writeAttribute("checked", "checked");}
> >
> > else
> >
> >
> $$("input[type=radio][name='owner'][value='false']")[0].writeAttribute("che
> cked",
> > "checked");
> >
> > On Sun, Apr 17, 2011 at 6:45 PM, Walter Lee Davis <[email protected]
> >wrote:
> >
> >
> >
> >
> >
> >
> >
> > > Sure, this is something I have struggled with as well. The return from
> a
> > > Template.evaluate call is not the generated object, but some other form
> of
> > > return (probably a boolean success or something like that -- not
> exactly
> > > sure).
> >
> > > If you need to get access to the object immediately after creating it,
> you
> > > may want to use the new Element() syntax instead of Template, because
> this:
> >
> > > var foo = new Element('div',{id:'bar'});
> >
> > > will return a handle to the element, even before you add it to the
> page,
> > > while Template.evaluate may need you to pause a beat before $('bar')
> will
> > > access the element from your page after you've inserted it.
> >
> > > Walter
> >
> > > On Apr 17, 2011, at 2:52 PM, Phil Petree wrote:
> >
> > > Using Prototype version 1.6.1 (I know everyone is up to 1.7 but we
> can't
> > >> upgrade at this time)
> > >> Code looks like this:
> >
> > >> var selectThis;
> > >> var radioTemplate = new
> > >> Template('input[type=radio][name=#{selectID}][value=#{selectValue}]');
> > >> var bValue = 1; // this is actually set from the rc of a function and
> is
> > >> absolutely 1 but it shouldn't matter
> >
> > >> selectThis = {selectID: 'owner', selectValue: bValue };
> > >> $$(radioTemplate.evaluate(selectThis))[0].writeAttribute("checked",
> > >> "checked");
> > >> the last line causes a throw and all processing stops. any ideas?
> >
> > >> Thanks,
> >
> > >> Phil
> >
> > >> --
> > >> You received this message because you are subscribed to the Google
> Groups
> > >> "Prototype & script.aculo.us" group.
> > >> To post to this group, send email to
> > >> [email protected].
> > >> To unsubscribe from this group, send email to
> > >> [email protected].
> > >> For more options, visit this group at
> > >>http://groups.google.com/group/prototype-scriptaculous?hl=en.
> >
> > > --
> > > You received this message because you are subscribed to the Google
> Groups
> > > "Prototype & script.aculo.us" group.
> > > To post to this group, send email to
> > > [email protected].
> > > To unsubscribe from this group, send email to
> > > [email protected].
> > > For more options, visit this group at
> > >http://groups.google.com/group/prototype-scriptaculous?hl=en.
>
> --
> You received this message because you are subscribed to the Google Groups
> "Prototype & script.aculo.us" group.
> To post to this group, send email to
> [email protected].
> To unsubscribe from this group, send email to
> [email protected].
> For more options, visit this group at
> http://groups.google.com/group/prototype-scriptaculous?hl=en.
>
>
--
You received this message because you are subscribed to the Google Groups
"Prototype & script.aculo.us" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/prototype-scriptaculous?hl=en.