52

I've got a script where I am dynamically creating select boxes. When those boxes are created, we want to set the onchange event for the new box to point to a function called toggleSelect().

I can't seem to get the syntax right to create the onchange event. Can someone tell me what I'm doing wrong? It doesn't throw an error, but doesn't work, either.

  col = dataRow.insertCell(0);
  var transport_select = document.createElement('select');
  transport_select.id = transport_select_id;
  transport_select.options[0] = new Option('LTL', 'LTL');
  transport_select.options[1] = new Option('FTL', 'FTL');
  transport_select.onChange = function(){toggleSelect(transport_select_id);};
  col.appendChild(transport_select);

5 Answers 5

70

Here's another way of attaching the event based on W3C DOM Level 2 Events Specification:

  transport_select.addEventListener(
     'change',
     function() { toggleSelect(this.id); },
     false
  );
Sign up to request clarification or add additional context in comments.

2 Comments

and the handler's first param is the event.
Thanks, This worked for me after lots of struggling with setAttribute("onchange",function(){}
43

Add

transport_select.setAttribute("onchange", function(){toggleSelect(transport_select_id);});

setAttribute

or try replacing onChange with onchange

3 Comments

Thanks! Changing it from "onChange" to "onchange" fixed it.
some versions of IE are known to have troubles with setAttribute, so the transport_select.onchange = function(){...} approach seems more fail-safe ;)
this gave me an error Uncaught SyntaxError: function statement requires a name
15

replace:

transport_select.onChange = function(){toggleSelect(transport_select_id);};

with:

transport_select.onchange = function(){toggleSelect(transport_select_id);};

on'C'hange >> on'c'hange


You can use addEventListener too.

1 Comment

More generally for getting option value or id: select_element.onchange = function(){console.log(this.id + ": " + this.value);};
11
yourSelect.setAttribute( "onchange", "yourFunction()" );

5 Comments

Hello and welcome to SO! You need to describe your answer. Also, you need to answer the question itself. user77413 is asking 'How to add an onchange event to a select box via javascript?' and also asks in their post 'Can someone tell me what I'm doing wrong?'. You need to address these in your answer.
This answer is short and effective.
This was the only answer that worked for me out of the above.
This is even better with yourSelect.setAttribute( "onchange", "yourFunction(this)" );
It was 2020, well past time to put binding events with HTML attributes to bed, along with table-based layouts and answers with no text. Use addEventListener to separate behavior from structure and allow for more than one event listener per event and element.
2

If you are using prototype.js then you can do this:

transport_select.observe('change', function(){
  toggleSelect(transport_select_id)
})

This eliminate (as hope) the problem in cross-browsers

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.