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

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Max

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

    Is there any way to set a select-multiple type <select
    multiple="multi ple"with multiple selected options in scripting?
    Any idea about this is appreciative.
  • Thomas 'PointedEars' Lahn

    #2
    Re: How to set multiple selected options in a select-multiple typeselect in scripting?

    Max wrote:
    Is there any way to set a select-multiple type <select
    multiple="multi ple"with multiple selected options in scripting?
    Yes, objects implementing the HTMLSelectEleme nt interface have an `options'
    property that refers to an object implementing the HTMLOptionsColl ection
    interface. Each item of that collection is then supposedly a reference to
    an object that implements the HTMLOptionEleme nt interface, and so has a
    writable `selected' property:

    selectRef.optio ns[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 bugRiddenCrashP ronePieceOfJunk = (
    navigator.userA gent.indexOf('M SIE 5') != -1
    && navigator.userA gent.indexOf('M ac') != -1
    ) // Plone, register_functi on.js:16

    Comment

    • Max

      #3
      Re: How to set multiple selected options in a select-multiple typeselect in scripting?

      On 4ÔÂ12ÈÕ, ÉÏÎç4ʱ26·Ö, Thomas 'PointedEars' Lahn <PointedE...@we b.de>
      wrote:
      Yes, objects implementing the HTMLSelectEleme nt interface have an `options'
      property that refers to an object implementing the HTMLOptionsColl ection
      interface. Each item of that collection is then supposedly a reference to
      an object that implements the HTMLOptionEleme nt interface, and so has a
      writable `selected' property:
      >
      selectRef.optio ns[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 bugRiddenCrashP ronePieceOfJunk = (
      navigator.userA gent.indexOf('M SIE 5') != -1
      && navigator.userA gent.indexOf('M ac') != -1
      ) // Plone, register_functi on.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=="SE LECT"){
      O.selectedIndex =-1;
      if(O.type=="sel ect-one"){
      for(z=0;z<O.len gth;z++){
      if(O.options[z].value==v)
      return O.selectedIndex =z;
      }
      }
      else if(O.type=="sel ect-multiple"){
      if(!isArray(v)) return false;
      for(z=0;z<O.len gth;z++){
      if(inArray(v,O. options[z].value))
      O.options[z].selected=true;
      }
      }
      }
      }
      ....no comments....

      Comment

      • Thomas 'PointedEars' Lahn

        #4
        Re: How to set multiple selected options in a select-multiple typeselect in scripting?

        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=="SE LECT"){
        O.selectedIndex =-1;
        if(O.type=="sel ect-one"){
        for(z=0;z<O.len gth;z++){
        if(O.options[z].value==v)
        return O.selectedIndex =z;
        }
        }
        else if(O.type=="sel ect-multiple"){
        if(!isArray(v)) return false;
        for(z=0;z<O.len gth;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.




        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

        Comment

        • Max

          #5
          Re: How to set multiple selected options in a select-multiple typeselect in scripting?

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

          >
          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.hasOwnPropert y)return false;
          if(typeof(a.len gth)!=='number' ||
          a.propertyIsEnu merable('length '))return false;
          return (a instanceof Array);
          }
          function inArray(a,v,s){
          if(!isArray(a)| |a.length==0)re turn 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.selec tedIndex=-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.

          Comment

          • Thomas 'PointedEars' Lahn

            #6
            Re: How to set multiple selected options in a select-multiple typeselect in scripting?

            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.hasOwnPropert y)return false;
            if(typeof(a.len gth)!=='number' ||
            a.propertyIsEnu merable('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.


            function inArray(a,v,s){
            if(!isArray(a)| |a.length==0)re turn 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.selec tedIndex=-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(El ement)
            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>

            Comment

            Working...