By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
425,710 Members | 1,613 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 425,710 IT Pros & Developers. It's quick & easy.

How to set multiple selected options in a select-multiple type selectin scripting?

P: n/a
Max
Is there any way to set a select-multiple type <select
multiple="multiple"with multiple selected options in scripting?
Any idea about this is appreciative.
Apr 11 '08 #1
Share this Question
Share on Google+
5 Replies


P: n/a
Max wrote:
Is there any way to set a select-multiple type <select
multiple="multiple"with multiple selected options in scripting?
Yes, objects implementing the HTMLSelectElement interface have an `options'
property that refers to an object implementing the HTMLOptionsCollection
interface. Each item of that collection is then supposedly a reference to
an object that implements the HTMLOptionElement interface, and so has a
writable `selected' property:

selectRef.options[42].selected = true;

See <http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-94282980and
<http://www.w3.org/TR/DOM-Level-2-HTML/ecma-script-binding.html>.
HTH

PointedEars
--
var bugRiddenCrashPronePieceOfJunk = (
navigator.userAgent.indexOf('MSIE 5') != -1
&& navigator.userAgent.indexOf('Mac') != -1
) // Plone, register_function.js:16
Apr 11 '08 #2

P: n/a
Max
On 4月12日, 上午4时26分, Thomas 'PointedEars' Lahn <PointedE...@web.de>
wrote:
Yes, objects implementing the HTMLSelectElement interface have an `options'
property that refers to an object implementing the HTMLOptionsCollection
interface. Each item of that collection is then supposedly a reference to
an object that implements the HTMLOptionElement interface, and so has a
writable `selected' property:

selectRef.options[42].selected = true;

See <http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-94282980and
<http://www.w3.org/TR/DOM-Level-2-HTML/ecma-script-binding.html>.

HTH

PointedEars
--
var bugRiddenCrashPronePieceOfJunk = (
navigator.userAgent.indexOf('MSIE 5') != -1
&& navigator.userAgent.indexOf('Mac') != -1
) // Plone, register_function.js:16
Thanx Thomas,
It works pretty well. And I make a function like this to set
<selectoption be selected with option's value:
function sel$(O,v){
if(O && O.nodeName=="SELECT"){
O.selectedIndex=-1;
if(O.type=="select-one"){
for(z=0;z<O.length;z++){
if(O.options[z].value==v)
return O.selectedIndex=z;
}
}
else if(O.type=="select-multiple"){
if(!isArray(v))return false;
for(z=0;z<O.length;z++){
if(inArray(v,O.options[z].value))
O.options[z].selected=true;
}
}
}
}
....no comments....
Jun 27 '08 #3

P: n/a
Max wrote:
[...] And I make a function like this to set
<selectoption be selected with option's value:
function sel$(O,v){
if(O && O.nodeName=="SELECT"){
O.selectedIndex=-1;
if(O.type=="select-one"){
for(z=0;z<O.length;z++){
if(O.options[z].value==v)
return O.selectedIndex=z;
}
}
else if(O.type=="select-multiple"){
if(!isArray(v))return false;
for(z=0;z<O.length;z++){
if(inArray(v,O.options[z].value))
O.options[z].selected=true;
}
}
}
}
....no comments....
Yes, I have some. First, you should write HTML DOM accessors
case-insensitive (use RegExp matching for that). Second, you should return
a value different from `undefined' in the "select-multiple" case. Third,
you may use switch...case instead of if..else if. Fourth, identifiers that
don't refer to constructors should not start with a capital letter to keep
the distinction.

Finally, please trim your quotes to the necessary minimum.

http://jibbering.com/faq/
PointedEars
--
Anyone who slaps a 'this page is best viewed with Browser X' label on
a Web page appears to be yearning for the bad old days, before the Web,
when you had very little chance of reading a document written on another
computer, another word processor, or another network. -- Tim Berners-Lee
Jun 27 '08 #4

P: n/a
Max
Yes, I have some. First, you should write HTML DOM accessors
case-insensitive (use RegExp matching for that). Second, you should return
a value different from `undefined' in the "select-multiple" case. Third,
you may use switch...case instead of if..else if. Fourth, identifiers that
don't refer to constructors should not start with a capital letter to keep
the distinction.

Finally, please trim your quotes to the necessary minimum.

http://jibbering.com/faq/

PointedEars
--
Anyone who slaps a 'this page is best viewed with Browser X' label on
a Web page appears to be yearning for the bad old days, before the Web,
when you had very little chance of reading a document written on another
computer, another word processor, or another network. -- Tim Berners-Lee
My other two functions used in the function mentioned:
function isArray(a){
if(!a||typeof(a)!=='object'||!a.hasOwnProperty)ret urn false;
if(typeof(a.length)!=='number'||
a.propertyIsEnumerable('length'))return false;
return (a instanceof Array);
}
function inArray(a,v,s){
if(!isArray(a)||a.length==0)return false;
if(typeof(v)=='string'||typeof(v)=='number'){
if(s===1){
for(var z=0;z<a.length;z++){
if(a[z]===v){
return true;
}
}
}else{
for(var z=0;z<a.length;z++){
if(a[z]==v){
return true;
}
}
}
}
return false;
}
for `1st, I should re-consider whether to check the values match by
case-insensitive or case-sensitive; `2nd, if the second parameter is
not given, it should just do selectRef.selectedIndex=-1 that set the
select elem not select nothing, and for `select-multiple', the values
should be in a [Array] to be checked with; `3rd, I never consider
which is better switch ... case... and if ... else ... ; `4th, do you
mean I'd better use inarray and isarray instead of inArray and
isArray? Perhaps it is just the way I`m used to writing scripts. May
be I should avoid doing that; at last, I think I should write more
neat and strict scripts.
Thanx again for your reply.
Jun 27 '08 #5

P: n/a
Max wrote:
>Yes, I have some. First, you should write HTML DOM accessors
case-insensitive (use RegExp matching for that). Second, you should return
a value different from `undefined' in the "select-multiple" case. Third,
you may use switch...case instead of if..else if. Fourth, identifiers that
don't refer to constructors should not start with a capital letter to keep
the distinction.

Finally, please trim your quotes to the necessary minimum.
Which part of that line did you not get?
>[...]

My other two functions used in the function mentioned:
function isArray(a){
if(!a||typeof(a)!=='object'||!a.hasOwnProperty)ret urn false;
if(typeof(a.length)!=='number'||
a.propertyIsEnumerable('length'))return false;
return (a instanceof Array);
}
Eeek.

function isArray(a)
{
return (typeof Array != "undefined"
? a.constructor == Array
: typeof a.length != "undefined");
}

And the provision is only there for very old implementations; it can be
omitted with the optimizations below.

http://PointedEars.de/es-matrix
function inArray(a,v,s){
if(!isArray(a)||a.length==0)return false;
if(typeof(v)=='string'||typeof(v)=='number'){
if(s===1){
This line does not make sense. Why insist on a number where a
boolean-convertible value suffices?
for(var z=0;z<a.length;z++){
if(a[z]===v){
return true;
}
}
}else{
for(var z=0;z<a.length;z++){
if(a[z]==v){
return true;
}
}
}
}
return false;
}
That does not strike me as being much reasonable either.

function isInIterable(v, a, bStrict)
{
// no need to try anything if not applicable or `a' is empty
if (typeof a.length != "undefined" && a.length)
{
var equals = (function() {
if (bStrict)
{
return function(x, y) {
// use eval() to hide this from very old implementations
return x === y;
};
}
else
{
return function(x, y) {
return x == y;
};
}
})();

for (var i = 0, len = a.length; i < len; i++)
{
if (equals(v, a[i]))
{
return true;
}
}
}

return false;
}
for `1st, I should re-consider whether to check the values match by
case-insensitive or case-sensitive;
Yes, you should: http://www.w3.org/TR/DOM-Level-2-HTM...l#ID-882764350
`2nd, if the second parameter is not given, it should just do
selectRef.selectedIndex=-1 that set the select elem not select nothing,
and for `select-multiple', the values should be in a [Array] to be
checked with;
And the return value could be an array of matching (HTML)Option(Element)
objects.
`3rd, I never consider which is better switch ... case... and if ... else ... ;
In your case if...else may suffice. However, this method could very well
extended to return the value of an arbitrary form control, according to the
`type' property of the object representing it, where switch...case would
come in handy.
`4th, do you mean I'd better use inarray and isarray instead of inArray
and isArray?
Of course not. I was talking about the *DOM* (you do know what a DOM is, yes?).
Perhaps it is just the way I`m used to writing scripts. May
be I should avoid doing that; at last, I think I should write more
neat and strict scripts.
Most definitely you should.
Thanx again for your reply.
You're welcome.
PointedEars
--
Use any version of Microsoft Frontpage to create your site.
(This won't prevent people from viewing your source, but no one
will want to steal it.)
-- from <http://www.vortex-webdesign.com/help/hidesource.htm>
Jun 27 '08 #6

This discussion thread is closed

Replies have been disabled for this discussion.