Prioritize form field

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

    Prioritize form field

    How can the function below be rewritten to prioritize form fields instead of
    other objects with the same name?

    For example I want getele("title") to retrieve the form field named "title"
    instead of document.title - how do I get it to do that?

    function getele(n, d){
    //argument 'n' is the name of the object you want to get
    //argument 'd' is the document object, it is not required
    var p,i,x;
    if (!d) {
    d = document;
    }
    if ( (p = n.indexOf("?")) 0 && parent.frames.l ength) {
    d = parent.frames[n.substring(p+1 )].document;
    n = n.substring(0,p );
    }
    if ( !(x=d[n]) && d.all) {
    x = d.all[n];
    }
    for (i=0; !x && i < d.forms.length; i++) {
    x = d.forms[i][n];
    }
    for (i=0; !x && d.layers && i < d.layers.length ; i++) {
    x = getele(n, d.layers[i].document);
    }
    if (!x && d.getElementByI d) {
    x = d.getElementByI d(n);
    }
    return x;
    }


    Regards,
    Allan Jensen


  • Safalra (Stephen Morley)

    #2
    Re: Prioritize form field

    On Thu, 28 Aug 2008 16:41:35 +0200, Frowning Freezer wrote:
    How can the function below be rewritten to prioritize form fields instead of
    other objects with the same name?
    >
    For example I want getele("title") to retrieve the form field named "title"
    instead of document.title - how do I get it to do that?
    >
    function getele(n, d){
    //argument 'n' is the name of the object you want to get
    //argument 'd' is the document object, it is not required
    var p,i,x;
    if (!d) {
    d = document;
    }
    if ( (p = n.indexOf("?")) 0 && parent.frames.l ength) {
    d = parent.frames[n.substring(p+1 )].document;
    n = n.substring(0,p );
    }
    if ( !(x=d[n]) && d.all) {
    x = d.all[n];
    }
    for (i=0; !x && i < d.forms.length; i++) {
    x = d.forms[i][n];
    }
    for (i=0; !x && d.layers && i < d.layers.length ; i++) {
    x = getele(n, d.layers[i].document);
    }
    if (!x && d.getElementByI d) {
    x = d.getElementByI d(n);
    }
    return x;
    }

    You can move the following if-block up in the function:

    for (i=0; !x && i < d.forms.length; i++) {
    x = d.forms[i][n];
    }

    This is, however, the wrong solution - rather than using this general
    'getele' function which tries to find something somewhere in the document
    with the appropriate element type/name attribute/id attribute, it would be
    better to search only within the specific namespace required (form field
    name, in this case).

    --
    Safalra (Stephen Morley)

    A Colour Picker Widget For JavaScript:

    Comment

    • Thomas 'PointedEars' Lahn

      #3
      Re: Prioritize form field

      Safalra (Stephen Morley) wrote:
      On Thu, 28 Aug 2008 16:41:35 +0200, Frowning Freezer wrote:
      >How can the function below be rewritten to prioritize form fields instead of
      >other objects with the same name?
      >>
      >For example I want getele("title") to retrieve the form field named "title"
      >instead of document.title - how do I get it to do that?
      >>
      >function getele(n, d){
      > //argument 'n' is the name of the object you want to get
      > //argument 'd' is the document object, it is not required
      > var p,i,x;
      > [...]
      > for (i=0; !x && i < d.forms.length; i++) {
      > x = d.forms[i][n];
      > }
      > [...]
      > if (!x && d.getElementByI d) {
      > x = d.getElementByI d(n);
      > }
      > return x;
      >}
      >
      >
      You can move the following if-block up in the function:
      Then the priority of it as compared to now would be *lower*, because
      execution does not return after the assignment. So the *last* assignment
      wins. So it should be moved down instead, but ...
      for (i=0; !x && i < d.forms.length; i++) {
      x = d.forms[i][n];
      }
      >
      This is, however, the wrong solution [...]
      .... ACK, in double meaning.


      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

      Working...