Connecting Tech Pros Worldwide Forums | Help | Site Map

Simple innerHTML issue

Christopher Benson-Manica
Guest
 
Posts: n/a
#1: Jul 20 '05
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?

--
Christopher Benson-Manica | I *should* know what I'm talking about - if I
ataru(at)cyberspace.org | don't, I need to know. Flames welcome.

Stuart Palmer
Guest
 
Posts: n/a
#2: Jul 20 '05

re: Simple innerHTML issue


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


"Christopher Benson-Manica" <ataru@nospam.cyberspace.org> wrote in message
news:bn639g$de9$1@chessie.cirr.com...[color=blue]
> 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[/color]
is[color=blue]
> the leading <option> tag?
>
> --
> Christopher Benson-Manica | I *should* know what I'm talking about - if I
> ataru(at)cyberspace.org | don't, I need to know. Flames welcome.[/color]


DB McGee
Guest
 
Posts: n/a
#3: Jul 20 '05

re: Simple innerHTML issue


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>



"Christopher Benson-Manica" <ataru@nospam.cyberspace.org> wrote in message
news:bn639g$de9$1@chessie.cirr.com...[color=blue]
> 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[/color]
is[color=blue]
> the leading <option> tag?
>
> --
> Christopher Benson-Manica | I *should* know what I'm talking about - if I
> ataru(at)cyberspace.org | don't, I need to know. Flames welcome.[/color]


Christopher Benson-Manica
Guest
 
Posts: n/a
#4: Jul 20 '05

re: Simple innerHTML issue


DB McGee <noreply@noreply.com> spoke thus:
[color=blue]
> <title>Dynamically Add Option to a Select Menu</title>
> (snipped)[/color]

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...

--
Christopher Benson-Manica | I *should* know what I'm talking about - if I
ataru(at)cyberspace.org | don't, I need to know. Flames welcome.
Lasse Reichstein Nielsen
Guest
 
Posts: n/a
#5: Jul 20 '05

re: Simple innerHTML issue


Christopher Benson-Manica <ataru@nospam.cyberspace.org> writes:
[color=blue]
> I'm trying to dynamically change the contents of a select box by doing the
> following...[/color]

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
--
Lasse Reichstein Nielsen - lrn@hotpop.com
DHTML Death Colors: <URL:http://www.infimum.dk/HTML/rasterTriangleDOM.html>
'Faith without judgement merely degrades the spirit divine.'
Vincent Puglia
Guest
 
Posts: n/a
#6: Jul 20 '05

re: Simple innerHTML issue


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

[color=blue]
> "Christopher Benson-Manica" <ataru@nospam.cyberspace.org> wrote in message
> news:bn639g$de9$1@chessie.cirr.com...[color=green]
> > 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[/color]
> is[color=green]
> > the leading <option> tag?
> >
> > --
> > Christopher Benson-Manica | I *should* know what I'm talking about - if I
> > ataru(at)cyberspace.org | don't, I need to know. Flames welcome.[/color][/color]
Closed Thread