Avatar billede pnr Nybegynder
20. juni 2006 - 11:04 Der er 15 kommentarer og
1 løsning

Problemer med script i Mozilla Firefox

Jeg har følgende script jeg bruger i forbindelse med noget asp.net:

<input name="ctl00$soeg" type="text" maxlength="20" id="ctl00_soeg" class="soegefelt" onKeyDown="fnTrapKD(document.all.ctl00_sog)" />

      function fnTrapKD(btn){
          if (document.all){
                if (event.keyCode == 13)
                {
                    event.returnValue=false;
                    event.cancel = true;
                    btn.click();
                }
            }
        }

Det hele virker fint i IE men ikke i Mozilla Firefox?
Avatar billede mclemens Nybegynder
20. juni 2006 - 22:33 #1
document.all er IE only ... kender ikke de andre funktioner
du tester på men med denne kommer kaldet op til din funtion.
- Har lige sat en alert på så du kan teste med documentet :o)


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

<script type="text/javascript">




      function fnTrapKD(e,btn){
                if (e.keyCode == 13)
                {

alert("Virker"); // Nedenstående deaktiveret med // i testdocumentet...
//                    e.returnValue=false;
//                    e.cancel = true;
//                    btn.click();
                }
        }
</script>

</head>

<body>
<input name="ctl00$soeg" type="text" maxlength="20" id="ctl00_soeg" class="soegefelt" onKeyDown="fnTrapKD(event,this)" />
</body></html>
Avatar billede mclemens Nybegynder
20. juni 2006 - 22:57 #2
document.all er IE only ( ups. Opera
forstår vist også document.all ... :D )
Avatar billede pnr Nybegynder
21. juni 2006 - 09:10 #3
Hej mclemens, tak for dine kommentare! godt at se dig her igen :-)

Jeg har nu lavet dit eksempel og det virker fint :-) Men så kommer jeg til "btn.click()" den virker ikke i Mozilla Firefox :-(
Avatar billede mclemens Nybegynder
21. juni 2006 - 09:56 #4
ok, ved ikke this i denne fnTrapKD(event,this)
skal være document.getElementById('ctl00_sog') eller om den istedet skal være
fnTrapKD(event); og du så skal submitte formularen med sog istedet med
document.formularensname.submit(); istedet for btn.click();
... Det er ikke helt gennemskueligt hvad du forsøger på - grunden til at
scriptet slet ikke blev kørt var at du brugte document.all (hvorfor det ikke virker kan jeg ikke lige se ... muligvis fordi du ikke kan clicke på et element med click ... det kan dog også være at du bare vil rette focus med btn.focus();?
- Anyhow det virker ikke lige i IE med den test jeg prøvede...
Avatar billede pnr Nybegynder
21. juni 2006 - 10:16 #5
Det skal bruges i forbindelse med noget asp.net, dvs når man står i et bestemt tekstfelt og trykker enter skal den aktivere en knap. I asp.net sætter man en onclick på knapperne som kalder en funktion i serverside koden. Derfor kan der være X antal tekstfelter og knapper der "høre sammen"

Pt. har jeg følgende kode der virker indtil "click":

        function fnTrapKD(e,btn){
                if (e.keyCode == 13)
                {
                    alert(btn.value);
                    btn.click();
                }
        }

<input name="ctl00$soeg" type="text" maxlength="20" id="ctl00_soeg" class="soegefelt" onKeyDown="fnTrapKD(event,document.forms[0].ctl00_sog)" />
                    <input type="submit" name="ctl00$sog" value="Søg" id="ctl00_sog" class="soegknap" />
Avatar billede mclemens Nybegynder
21. juni 2006 - 10:21 #6
Mener ikke at du kan aktivere en knap i FF - man kan selvfølgelig submitte formularen med document.formularnavn.submit(); evt. kan du have et skjult tekst fejl som du varierer value på afhængig af hvilket felt man trykker på enter i... - hvis det er fordi den skal køre noget onsubmit handling istedet kan du selvfølgelig aktivere onsubmit funktionerne direkte istedet...
Avatar billede pnr Nybegynder
21. juni 2006 - 10:26 #7
Hvis jeg begynder at lave noget med skjulte tekstfelter så går noget af idéen af asp.net, det er jo rimlig smart at man ikke skal tænke på at validere på hvilken knap der er trykket på. Så er problemet ikke større end at jeg vedtager at man kun kan trykke på knapperne for at submitte.
Avatar billede mclemens Nybegynder
21. juni 2006 - 10:28 #8
<input type="submit" name="ctl00$sog" <- Prøv at rette til:
<input type="submit" name="ctl00_sog" ... IE kører på id FF kører på name
Avatar billede mclemens Nybegynder
21. juni 2006 - 10:29 #9
( IE kører på enten id eller name når man bruger document.formularnavn_eller_nummer_array_angivelse.tekstnavn )
Avatar billede mclemens Nybegynder
21. juni 2006 - 10:31 #10
Du kan selvfølgelig også prøve med id men så prøv id definering med getElementById() istedet for formular angivelsen...


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

<script type="text/javascript">




        function fnTrapKD(e,btn){
                if (e.keyCode == 13)
                {
                    alert(btn.value);
                    btn.click();
                }
        }
</script>

</head>

<body><form>
<input name="ctl00$soeg" type="text" maxlength="20" id="ctl00_soeg" class="soegefelt" onKeyDown="fnTrapKD(event,document.getElementById('ctl00_sog'))" />
                    <input type="submit" name="ctl00$sog" value="Søg" id="ctl00_sog" class="soegknap" /></form>
</body></html>
Avatar billede mclemens Nybegynder
21. juni 2006 - 10:35 #11
Hmmm, virker ikke helt i FF der tager den altid første submit knap...
- Så hvis det skal virke i FF ligner det deaktivering af enter, skjult text felt eller måske en disabling af andre submit knapper når man er under et bestemt felt...
(kan desværre ikke lige se løsningen med flere submit knapper...)
Avatar billede pnr Nybegynder
21. juni 2006 - 10:40 #12
Du er godt nok ihærdig :-)

Tror jeg har fundet en løsning:

function defaultButtonFunktion(evt,btn){
var keyCode = evt.which ? evt.which : evt.keyCode;
  if(keyCode == 13) {
    evt.returnValue=false;
    evt.cancel = true;
    btn.click();
  }
}

fandt den her: http://www.eksperten.dk/spm/444537
Avatar billede mclemens Nybegynder
21. juni 2006 - 10:50 #13
- Minder lidt om 10:31:44 ... Synes dog heller ikke FF
vil være med når der er flere submit knapper ... :/
Avatar billede pnr Nybegynder
21. juni 2006 - 11:05 #14
Jeg har 3 knapper og de virker alle :-) Så det var løsningen på mit problem

mclemens du får point for din altid ihærdige hjælp!
Avatar billede mclemens Nybegynder
21. juni 2006 - 11:15 #15
[ mclemens du får point for din altid ihærdige hjælp! ]
Gør mit bedste :/. Du burde dog have beholdt pointene da
du selv løste dit problem ... men tak for point alligevel...

( Fører dem gerne tilbage hvis du ombestemmer dig. Skal
nok lige have kigget på den løsning du henviste til iaften.
Så ved jeg hvordan den løses hvis jeg selv får problemet :o) )
Avatar billede mclemens Nybegynder
21. juni 2006 - 11:40 #16
Har fundet ud af dem nu :o)
- Kunne ikke få 10:40:48 til at virke
fordi jeg ikke rettede funktionsnavnet :D
- Og 10:31:44 virkede ikke fordi den var reduceret til en
alert og click istedet for returnValue , cancel og click :o)
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