# How do I get the selected value from a collection\_select in

**URL:** <https://www.ruby-forum.com/t/how-do-i-get-the-selected-value-from-a-collection-select-in/86413>\
**Category:** Rails\
**Created:** [February 22, 2007, 2:42am UTC](https://www.ruby-forum.com/t/how-do-i-get-the-selected-value-from-a-collection-select-in/86413 "2007-02-22T02:42:19Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![scott](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/3e96dc/32.png) [@scott](https://www.ruby-forum.com/u/scott)\
**Post date:** [February 22, 2007, 2:42am UTC](https://www.ruby-forum.com/t/how-do-i-get-the-selected-value-from-a-collection-select-in/86413/1 "2007-02-22T02:42:19Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![scott](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/3e96dc/32.png) [@scott](https://www.ruby-forum.com/u/scott)\
**Post date:** [February 22, 2007, 3:12am UTC](https://www.ruby-forum.com/t/how-do-i-get-the-selected-value-from-a-collection-select-in/86413/2 "2007-02-22T03:12:21Z")

</div>

Hello Scott,

2007/2/21, Scott [removed\_email\_address@domain.invalid](mailto: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://blog.teksol.info/)  
[http://piston.rubyforge.org/](http://piston.rubyforge.org/)

---

<div class="post-metadata">

**Author:** ![scott](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/3e96dc/32.png) [@scott](https://www.ruby-forum.com/u/scott)\
**Post date:** [February 22, 2007, 3:58am UTC](https://www.ruby-forum.com/t/how-do-i-get-the-selected-value-from-a-collection-select-in/86413/3 "2007-02-22T03:58:25Z")

</div>

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”
