Avatar billede fredand Forsker
25. juli 2008 - 16:43 Der er 11 kommentarer og
1 løsning

How to find a element in a form?

Hello!

I got a form with several elements. Some are select-tags and they for eg can be looking like:
<select name="telefon[0].telefonTyp" size="1">
<option value="">--</option>
<option value="1">1</option>
<option value="2">2</option>
</select>

<select name="telefon[1].telefonTyp" size="1">
<option value="">--</option>
<option value="1">1</option>
<option value="2">2</option>
</select>

Hope you can see that the only thing that differ is the names:
telefon[0].telefonTyp
telefon[1].telefonTyp

I now need to set focus on one or the other in different situations.

I then need to loop through the list of select elements and find the one to set focus to.

I have tried this to first of all find the elements with names that starts with "telefon":

function f_setFocus()

  var bFound = false;

    // for each form
    for (f=0; f < document.forms.length; f++)
    {
          // for each element in each form
          for(i=0; i < document.forms[f].length; i++)
            {
                if (document.forms[f][i].type == 'select-one')
                {
              //Kolla att det är en telefon
              alert(document.forms[f][i].name);
              var selectname = document.forms[f][i].name;
              if (selectname.startsWith('telefon'))
              {
                // set the focus to it
                document.forms[f][i].focus();
                var bFound = true;
              }
                }
                         
                // if found in this element, stop looking
          if (bFound == true)
          {
              break;
          }
            }

      // if found in this element, stop looking
      if (bFound == true)
      {
        break;
      }
    }
}

But I only get the error that the object does not support the attribute or method.

I guess it menas this method call:
selectname.startsWith('telefon'))

Do any one know how to solve this, to find out if a .name starts with a certain string?

Or do you guys see any other better solution to the whole problem?

Best regards
Fredrik
Avatar billede erikjacobsen Ekspert
25. juli 2008 - 17:00 #1
Give the elements an id, and use document.getElementById.
Avatar billede roenving Novice
25. juli 2008 - 17:07 #2
-- og eriks svar er det rigtige, men skal du have fat i form-elementer med navne, der indeholder mærkelige tegn, skal du bruge elements-collection'en:

form.elements["telefon[1].telefonTyp"]
Avatar billede fredand Forsker
25. juli 2008 - 22:03 #3
Hello!

Thanks for your replies mates!

Hm, tricky, the framwork that render the elemnts is Strust, I guess, and hope, I can add "id" to elements through Struts.

Is there en easy way to get hold of an element though a collection like:
if( form.elements["telefon[1].telefonTyp"] != null) 
{
form.elements["telefon[1].telefonTyp"].setFocus();
}

Back at work on monday and really would love to know before?

Best regards!
Fredrik  (sweden)
Avatar billede w13 Novice
25. juli 2008 - 22:45 #4
Well, form.elements["telefon[1].telefonTyp"] addresses the element, doesn't it?
I'm not sure I get your question.
Avatar billede mclemens Nybegynder
26. juli 2008 - 02:39 #5
How about:

<b onclick="f_setFocus('telefon',1);">test focus select</b>

function f_setFocus(str,t){
  if(elm=document.getElementsByName(str+"["+t+"]."+str+"Typ")[0]){ /* Handle found element */
    elm.focus();
  }else{ /* Handle unfound element */
    alert("The element wasn't found");
  }
}
Avatar billede mclemens Nybegynder
26. juli 2008 - 02:48 #6
if (selectname.startsWith('telefon'))

in your script should probably had been

if (selectname.indexOf('telefon')==0)
Avatar billede fredand Forsker
28. juli 2008 - 16:42 #7
Hello!

Thanks for all help!

You all should give a "svar" so I can reward you all!

My solution become to be this:

function f_setFocus(elementFokusInputTyp, elementFokusElementNamn)
{
      alert('elementFokusInputTyp: ' + elementFokusInputTyp);
      alert('elementFokusElementNamn: ' + elementFokusElementNamn);
     
  var bFound = false;

  // for each form
  for (f=0; f < document.forms.length; f++)
  {
      // for each element in each form
      for(i=0; i < document.forms[f].length; i++)
      {
        if (document.forms[f][i].type == elementFokusInputTyp)
        {
            //Check the name
            var selectname = document.forms[f][i].name;         
            if (selectname.indexOf(elementFokusElementNamn) == 0)
            {
              // set the focus to it
              document.forms[f][i].focus();
              var bFound = true;
              break;
            }
        }
      }

      // if found in this element, stop looking
      if (bFound == true)
      {
        break;
      }
  } 
}

Best regards
Fredrik
Avatar billede olebole Juniormester
28. juli 2008 - 17:28 #8
<ole>

Det ligner under alle omstændigheder en dårlig løsning. Udfra dit spørgsmål at dømme, burde mclemens' forslag (26/07-2008 02:39:31) være præcis, hvad du har brug for ... eller også har jeg stadig ikke forstået spørgsmålet  =)

/mvh
</bole>
Avatar billede mclemens Nybegynder
28. juli 2008 - 21:06 #9
Olebole > Min henvendte sig mere til 25/07-2008 22:03:17
end det oprindelige med check på både start af name og type.


Fredrik > Overvej evt. denne:
<script type="text/javascript">
function f_setFocus(elementFokusInputTyp, elementFokusElementNamn)
{
      alert('elementFokusInputTyp: ' + elementFokusInputTyp);
      alert('elementFokusElementNamn: ' + elementFokusElementNamn);
   
  var elms=document.getElementsByTagName(elementFokusInputTyp);

  // for each element
  for(i=0; i < elms.length; i++)
  {     
    if (elms[i].getAttribute("name").indexOf(elementFokusElementNamn) == 0)
    {
      // set the focus to it
      elms[i].focus();
      break;
    }
  }
}
</script>


... Dog burde indexOf(elementFokusElementNamn) == 0
nok laves om til indexOf(elementFokusElementNamn+"[") == 0
(for at den ikke fanger telefonbog[... ved forespørgsel på "telefon")
Avatar billede fredand Forsker
28. juli 2008 - 21:27 #10
Hello Mates!

Thanks for your comments I will try it out tommorow!

Very interesting!!

I get back to you then!

Fredrik
Avatar billede fredand Forsker
29. juli 2008 - 14:29 #11
Hello Mates!

Then I guess this should be my final solution:

function f_setFocus(elementFokusInputTyp, elementFokusElementNamn)

    var elmentsOfType = document.getElementsByTagName(elementFokusInputTyp);
   
    // for each elements of type of interest
  for(i=0; i < elmentsOfType.length; i++)
  {     
    //find correct element to set focus to
    if (elmentsOfType[i].getAttribute("name").indexOf(elementFokusElementNamn) == 0)
    {
        // set the focus to it
        elmentsOfType[i].focus();
        break;
    }
  }
}

The method is called when tha page is loaded and there is 2 attributes set in the request:

<script language='javascript'>
<%
  String elementFokusInputTyp = (String)request.getAttribute("ELEMENT_FOKUS_INPUT_TYP");
      String elementFokusElementNamn = (String)request.getAttribute("ELEMENT_FOKUS_ELEMENT_NAMN");
      if ( elementFokusInputTyp != null && elementFokusElementNamn != null )
      {
%>
        f_setFocus("<%=elementFokusInputTyp%>", "<%=elementFokusElementNamn%>");
<%
        request.removeAttribute("ELEMENT_FOKUS_INPUT_TYP");
        request.removeAttribute("ELEMENT_FOKUS_ELEMENT_NAMN");
      }
%>
</script>

Feel free to comment the solution.

Thanks alot for all!
Please also all of you give "svar" so I can reward you!

Best regards
Fredrik
Avatar billede fredand Forsker
02. juli 2010 - 21:13 #12
Thanks for the help amigos!

Since it is old I need to accept it!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester