Simple innerHTML issue

  • Thread starter Christopher Benson-Manica
  • Start date
C

Christopher Benson-Manica

I'm trying to dynamically change the contents of a select box by doing the
following...

function myfunc() {
var obj=document.getElementById("objname"); // name of the select box
var str='';
str+='<option>blah</option>';
obj.innerHTML=str;
alert(obj.innerHTML);
}

For reasons I don't understand, the alert gives me 'blah</option>'. Where is
the leading <option> tag?
 
S

Stuart Palmer

I'm not sure you ammend select objects like this......i.e whether it works
in various browsers.
I'd strip it out and create 'new Option'

Someone else may have a suggestion, but I am not sure this is the right
route for modifying options myself.....I could be wrong.

Stu
 
D

DB McGee

This works:

<html>
<head>
<title>Dynamically Add Option to a Select Menu</title>
<script type="text/javascript">
function addOption() {
var oSelect = document.getElementById( 'myselect' )
nextOptIndex = oSelect.length + 1
newOpt = document.createElement( 'OPTION' );
newOpt.text = "New Option #" + nextOptIndex
newOpt.value = nextOptIndex
oSelect.add( newOpt, nextOptIndex )
}
</script>
</head>
<body>
<h1>Dynamically add an option to a select menu</h1>
<select name="myselect" id="myselect">
<option value="default">choose me</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
<input type="button" value="add" name="add" onClick="addOption()">
</body>
</html>
 
C

Christopher Benson-Manica

DB McGee said:
<title>Dynamically Add Option to a Select Menu</title>
(snipped)

Thanks - I think I'm undestanding why what I had didn't work. The options are
an array and I wasn't treating them like one...
 
L

Lasse Reichstein Nielsen

Christopher Benson-Manica said:
I'm trying to dynamically change the contents of a select box by doing the
following...

Since you don't say which browser you are using, I'll assume it is
iCab on a Macintosh.

Just kidding, I'll assume it is IE on Windows, since that is what it
usually is when people don't say.

Don't use innerHTML to change the content of a select element in IE.
The content of a select element isn't general HTML, and it won't work
as you expect it to. Using innerHTML adds child nodes to the select
node in the DOM tree, not options to the options collection.

Use
selectRef.add(new Option("text","value"))
instead.

/L
 
V

Vincent Puglia

Hi Stuart,

1) document.getElementById is not crossBrowser compatible -- it will
be recognized only by version 5+ browsers.

2) if you want to change a specific option's value/text, the following
is sufficient:


function doit(selObj, ndx)
{
txt = 'a'
selObj.options[ndx].text = txt;
selObj.options[ndx].value = txt;
}

<form name='a'>
<select name="b" onchange="alert(this.options[this.selectedIndex].value)">
<option value='0'>1</option>
<option value='1'>2</option>
<option value='2'>3</option>
</select>
<input type="button" onclick="doit(this.form.b, 2)">
</form>

3) if you want to remove an option, you either set that index to null
selObj.options[0] = null
or set the options.length to some number
selObj.options.length = 0;

4) if you wish to append new options, you need to use the new Option()
constructor. see the selection list script/tutorials at my GrassBlade
Javascript site: http://members.aol.com/grassblad

Vinny
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,744
Messages
2,569,483
Members
44,901
Latest member
Noble71S45

Latest Threads

Top