Forum: Ruby on Rails How do I get the selected value from a collection_select in

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Scott (Guest)
on 2007-02-22 03:42
(Received via mailing list)
I have the classic issue where I have two select boxes, the second's
contents dependent on the first. I found some same code that works
fairly well using an Ajax.Updater. However, I need to pass in the
selected value of the original select list to the ajax call. I am
trying to use this[this.selectedIndex].value but keep getting a
"undefined local variable or method `this' for #<#<Class:0x3143860>:
0x3143838>".

Any ideas? Here's a my snippet of code from my view.


          collection_select('product',
                            'departments',
                            @departments,
                            :id, :name,
                            {:prompt => "Select"},
                            html_options =
                               {
                                   :onChange => "new
Ajax.Updater('categories_span',
                                                '/mgs/
department_changed/'" + this[this.selectedIndex].value + ",
                                                {asynchronous:true,
evalScripts:true});"
                               })
        %>

Thanks,

Scott
François B. (Guest)
on 2007-02-22 04:12
(Received via mailing list)
Hello Scott,

2007/2/21, Scott <removed_email_address@domain.invalid>:
> Any ideas? Here's a my snippet of code from my view.

You're falling into the classic hole of Ruby vs JavaScript code.

> department_changed/'" + this[this.selectedIndex].value + ",
>                                                 {asynchronous:true,
> evalScripts:true});"
>                                })
>         %>

Your onChange parameter must be a string that will be evaluated
client-side.  The way your wrote it, you are calling this on the Rails
View object, which is the error you are getting.

You must either: escape your quotes, or use the %Q() operator to
enable you to use quotes inside a string, without escaping:


:onChange => %Q(
new Ajax.Updater('categories_span', '/mgs/department_changed/' +
this[this.selectedIndex].value, {asynchronous:true, evalScripts:true)

Hope that helps !
--
François Beausoleil
http://blog.teksol.info/
http://piston.rubyforge.org/
Scott (Guest)
on 2007-02-22 04:58
(Received via mailing list)
Hi François,

Thanks for getting back to me so quickly.

That sort of worked. When I wrap in the %Q, I get the following in the
source of the rendered page:

      <select id="product_departments" name="product[departments]"
onChange="new Ajax.Updater('categories_span',
                                                '/mgs/
department_changed/' + this[this.selectedIndex].value + ,
                                                {asynchronous:true,
evalScripts:true});">

Unfortunately, the controller is called when the item's selection is
changed.

If I subsitute the this[this.selectedIndex].value with 4 for example,
just to see if it works, it does in fact update the second select box.

Any other ideas?

Thanks again,

Scott


On Feb 21, 9:11 pm, "François Beausoleil"
This topic is locked and can not be replied to.