Avatar billede noex Nybegynder
08. august 2001 - 16:11 Der er 15 kommentarer og
2 løsninger

set focus på inputelement

Jeg har et text inputelement, som jeg ønsker at sætte focus på, såfremt elementet modtager en onBlur event. Dette virker ikke i Netscape6. Kan nogen fortælle, hvad der skal ændres?

<script>
  function doFocus(elem){
    elem.focus();
  }
</script>

<form name=\"minForm\">
  <input type=\"text\" size=\"20\" onBlur=\"doFocus(this)\"><br>
  <input type=\"text\" size=\"20\"
</form>
Avatar billede nikolajdu Nybegynder
08. august 2001 - 22:46 #1
Prøv at bruge getElementById.elem.focus();
Avatar billede nikolajdu Nybegynder
08. august 2001 - 23:01 #2
IE er som regel bedøvende ligeglad med at holde syntaksen. IE 4.0 bruger document.all - Netscape 4.x bruge document layers og Netscape 6.0 bruger document.getElementById - Det samme understøttes af IE 5.5 som dog også forstår document.all og IE´s sløsede kode.
Avatar billede noex Nybegynder
09. august 2001 - 09:39 #3
I mit eksempel har jeg jo valgt at sende hele input elementet med op i funktionen doFocus(), hvorefter jeg manipulerer det medsendte input element.

Dit forslag (brug af metoden getElementById) vil betyde, at jeg i min funktion doFocus() skal finde input elementet vha. dets id property. Jeg sender således inputelementets id med op i funktionen, i funktionen finder jeg inputelementet vha. id\'et og sætter focus på elementet.

Dette virker heller ikke i NS6. Desværre :-(

Nedenfor ses den ændrede kode:

<script>
  function doFocus(elemId){
    document.getElementById(elemId).focus();
  }
</script>

<form name=\"minForm\">
  <input type=\"text\" size=\"20\" id=\"minInput\" onBlur=\"doFocus(this.id)\"><br>
  <input type=\"text\" size=\"20\"
</form>



......somebody HELP !
Avatar billede nikolajdu Nybegynder
09. august 2001 - 14:49 #4
Prøv med document.getElementById[elemId].focus
Avatar billede nikolajdu Nybegynder
09. august 2001 - 14:50 #5
document.getElementById[elemId].focus()
Avatar billede noex Nybegynder
09. august 2001 - 15:36 #6
Tak for dine indlæg og din indsats !

hmmm..... mener du, at jeg skal bruge \'kantede\' paranteser i stedet for \'bløde\'? Det er da forkert syntaks. Eller mener du, at jeg skal tilgå elementet som et associativt array? I givet fald, ville syntaksen da være document.formnavn[elementnr].focus(), men dette virker nu heller ikke. Jeg tror ikke, at problemet er at få fat på selve inputelementet. Det er jo lykkedes.

skal jeg returnere \'false\' et sted, ligesom ved brug af onSubmit, hvor formen ikke submittes, hvis en funktion returnerer false til eventhandleren? Kan onBlur overhovedet modtage true eller false? Ikke så vidt jeg ved, og jeg har også prøvet uden held...... :-(
Avatar billede nikolajdu Nybegynder
09. august 2001 - 15:40 #7
Kantede Parenteser.

Prøv med document.forms[elemennr].focus()

Hvis du er i tvivl om du har fat i objektet kan du jo lave en alert for at tjekke det.
Avatar billede noex Nybegynder
09. august 2001 - 15:44 #8
Jo, men som jeg lige skrev, så har jeg godt nok fat i inputobjektet. Kan bare ikke sætte focus på det. document.forms[elemennr].focus() virker heller ikke. Og vi taler jo NS6 !
Avatar billede nikolajdu Nybegynder
09. august 2001 - 15:46 #9
Ok ok. Må vist hellere selv lige afprøve det :-)
Avatar billede nikolajdu Nybegynder
09. august 2001 - 16:07 #10
Jeg har forsøgt mig med den mere simple onBlur=\"this.focus();\" og den virker i NS 4.x, men ikke i Ns 6.0 - Har så lige tjekket op på at den skulle kunn gøre det og det kan den, menhvordan er et godt spørgsmål. Finden lige en rigtig NS Expert.

http://developer.netscape.com/docs/manuals/communicator/jsref/evnt3.htm
http://developer.netscape.com/docs/manuals/communicator/jsref/win1.htm#1011491
Avatar billede jakoba Nybegynder
09. august 2001 - 17:07 #11
Det ser ud til at være et spørgsmål om timing. med et delay på 50ms fokuserer den fint (men skal så også adresseres via form-ID).
se testprogram her:
http://hjem.get2net.dk/Jakob.Aggernaes/temp/exp96463.html

Nb: når først den \'grab focus\' funktion virker har du et monumentalt uælkkert vindue der lægger sig ovenpå alting. Er du sikker på det er ønskværdigt?

mvh JakobA

Nikolajdu >> tak for tippet :-)
og tillykke med pladsen :-))
Avatar billede jakoba Nybegynder
09. august 2001 - 17:08 #12
Ups. uælkkert -> ulækkert
Avatar billede noex Nybegynder
10. august 2001 - 08:06 #13
Hej jakoba. Tak for dit indlæg. Ja....det ser ud til UDELUKKENDE at være et spørgsmål om timing. Selv med en tidsforskydelse på blot 1ms virker det i NS6. Du skriver desuden, at inputelementet SKAL adresseres via formID. Dette er dog ikke nødvendigt (se doFocusAlternativ()). Man kan altså også tilgå inputelementet direkte via dens egen id-attribut. Nedenfor er koden barberet ned til et minimum.

....men, men, men: Hvordan er du dog kommet på, at det kunne have noget med timing at gøre???

Jeg har imidlertid ofte problemer med crossbrowser funktionalitet, hvor jeg ikke aner, hvad jeg skal stille op med NS6. Har du nogle specielt gode links til steder, der omhandler NS6\'s spidsfindigheder. Det er jo ikke altid nok blot at overholde DOM1. Det er dette spørgsmål/svar jo et godt eksempel på.

nikolajdu får lige en lille bid af kagen for sit engagement :-)

Tak begge to!!!

_____________________________________

<script>
  function doFocus(){
    document.forms[0].elements[0].focus();
  }
 
  function doFocusAlternativ(){
  document.getElementById(\'minInput\').focus();
  }
</script>

<body>

<form name=\"minForm\">
  <input type=\"text\" size=\"20\" id=\"minInput\" onBlur=\'setTimeout(\"doFocus();\",1)\'><br>
  <input type=\"text\" size=\"20\">
</form>
Avatar billede jakoba Nybegynder
10. august 2001 - 08:16 #14
Takker.
jep, getElementById kan, men kun i DOM-brovsere. IE4 & NS4.7- skal have den anden vej.
NS6 er normalt helt DOM så den burde ikke vær det store problem.

mvh JakobA
Avatar billede noex Nybegynder
10. august 2001 - 09:31 #15
Selv tak,

Men hvordan hulen er du kommet på, at det kunne have noget med timing at gøre??? Kunne du give mig et tip til, hvordan du kom ind på det spor? Det havde jeg aldrig selv resonneret mig frem til.....
Avatar billede nikolajdu Nybegynder
10. august 2001 - 11:19 #16
Noex det var derfor jeg skrev til jakoba. Han har af og til de mærkeligste løsninger ;-)
Avatar billede jakoba Nybegynder
10. august 2001 - 15:19 #17
Fordi jeg har bemærket at IE og NS håndterer paralelle scripts forskelligt.
IE kører timesliced. NS bruger kooperativ schedulering. Begge metoder har fordele og bagdele.
I en situation som her hvor et klik (der sætter fokus der der klikkes) skal sætte fokus et andet sted er det mere end sædvanlig nødvendigt at have orden i sekvensen af ting der sker, så jeg prøvede.

mvh JakobA
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