Avatar billede tipsen Nybegynder
27. oktober 2002 - 20:40 Der er 21 kommentarer og
1 løsning

Fejl i funktion - men hvad?

Følgende ligger i filen test.js:

// general purpose function to see if a suspected numeric input is a positive integer
function isPosInteger(inputVal) {
    inputStr = inputVal.toString()
    for (var i = 0; i < inputStr.length; i++) {
        var oneChar = inputStr.charAt(i)
        if (oneChar < “0” || oneChar > “9”) {
            return false
        }
    }
    return true
}
/*
LaunchBrowser takes the following arguments:
url:        URL to open
title:        Title of new window
width:        pixels width of window
height:        pixels height of window
location:    Show locationbar (yes|no)
menubar:    Show the menubar (yes|no)
scrollbars:    Show the scrollbars (yes|no)
status:        Show the statusbars (yes|no)
titlebar:    Show the titlebar (yes|no)
toolbar:    Show the toolbar (yes|no)
resizable:  Can you resize the window (yes|no)
directories:Show the personal toolbar (yes|no)
*/

function LaunchBrowser(url, title, width, height, locationbar, menubar, scrollbars, statusbar, titlebar, toolbar, resizable, directorybar) {
    params = ''
    if(locationbar='no') params += 'location=no'
    else params += 'locationbar=yes'

    if(menubar='no') params += ',menubar=no'
    else params += ',menubar=yes'
   
    if(scrollbars='no') params += ',scrollbars=no'
    else params += ',scrollbars=yes'
   
    if(statusbar='no') params += ',status=no'
    else params += ',status=yes'

    if(titlebar='no') params += ',titlebar=no'
    else params += ',titlebar=yes'

    if(toolbar='no') params += ',toolbar=no'
    else params += ',toolbar=yes'

    if(resizable='no') params += ',resizable=no'
    else params += ',resizable=yes'

    if(directorybar='no') params += ',directories=no'
    else params += ',directories=yes'

    if(isPosInteger(width)) params += ',width=' + width
    if(isPosInteger(height)) params += ',height=' + height

    download = window.open(url, title, params)
}

i html-filen har jeg følgende elementer:
<script src="functions/test.js" language="JavaScript" type="text/javascript"></script>
<A HREF="java script:LaunchBrowser('http://tommy/', 'title', 300, 300, 'yes', 'yes', 'yes', 'yes', 'yes', 'yes', 'yes', 'yes');">Launch</A>

Det fungerer ikke når jeg klikker på linket, men jeg kan ikke regne ud hvorfor - og den fejlmelding jeg får kan jeg ikke bruge til så meget... :-/
Avatar billede tipsen Nybegynder
27. oktober 2002 - 20:43 #1
...synes det er svært at debugge javascript programmer - hvordan gør I andre?
Avatar billede topsite Nybegynder
27. oktober 2002 - 20:44 #2
Det er ikke altid nemt at debugge JS,
kan du ikke lige poste fejlen
Avatar billede erikjacobsen Ekspert
27. oktober 2002 - 20:52 #3
if(locationbar='no') params += 'location=no'
er i hvert fald forkert. Det skal nok være:
  if(locationbar=='no') params += 'location=no'
og tilsvarende nedenfor

Og JA, lad os se fejlbeskedden :)
Avatar billede erikjacobsen Ekspert
27. oktober 2002 - 20:53 #4
Man debugger nemmest JavaScript ved at indsætte alert(...)
så man kan se hvor man kommer hen, og hvilke værdier udvalgte
variabler har.
Avatar billede mikoalngelo Nybegynder
27. oktober 2002 - 20:54 #5
JS kan ikke se tallet i strengen uden videre, så du skal skrive:
      if (Number(oneChar) < “0” || Number(oneChar) > “9”) {
Avatar billede erikjacobsen Ekspert
27. oktober 2002 - 20:55 #6
Det betyder ikke noget, mikoalngelo ... det er rigtigt
nok som det er.
Avatar billede tipsen Nybegynder
27. oktober 2002 - 20:59 #7
Fejl (fra IE)
Line: 1
Char: 1
Error: Object expected
Code: 0
URL: http://...
Avatar billede tipsen Nybegynder
27. oktober 2002 - 21:00 #8
erik: Har rettet fra '=' til '==' i alle sammenligninger
Avatar billede erikjacobsen Ekspert
27. oktober 2002 - 21:04 #9
Så må vi igang. Er du sikker på filen overhovedet bliver
læst ind. Sæt en alert("start") i toppen af din .js fil
og en alert("slut") ind i bunden. Og prøv så.
Avatar billede tipsen Nybegynder
27. oktober 2002 - 21:13 #10
[Browsercache slettet - så det ikke risikerer at give problemer!]

Hmm - jeg har forsøgt at indsætte alert("blabla") uden at der sker noget som helst - det kan jo godt undre lidt!
Avatar billede tipsen Nybegynder
27. oktober 2002 - 21:15 #11
Kan jeg evt. gøre det simplere og indsætte det i selve dokumentet indenfor <HEAD> tags?
Avatar billede erikjacobsen Ekspert
27. oktober 2002 - 21:16 #12
Ligger filen det rigtige sted?
Avatar billede tipsen Nybegynder
27. oktober 2002 - 21:18 #13
den ligger samme sted som to andre .js filer der begge bliver inkluderet uden problemer med samme sti - og filnavnet er også korrekt med både store og små bogstaver
Avatar billede tipsen Nybegynder
27. oktober 2002 - 21:23 #14
Jagten er afblæst...
Avatar billede tipsen Nybegynder
27. oktober 2002 - 21:25 #15
i funktionen IsPosInteger står linien:

        if (oneChar < “0” || oneChar > “9”) {

funktionen har jeg copy-pastet fra et pdf-dokument og hvis man ser godt efter er det nogle lidt "sjove" anførselstegn - da jeg fik rettet dem, fungerede det hele fint! (inkl. en hel del alert-bokse jeg efterhånden havde fået sat ind :-))

Tak for hjælpen Erik - du fik rettet mine manglende '==' - så smid et svar, så du kan få nogle dejlige Eksperten-points :-)
Avatar billede erikjacobsen Ekspert
27. oktober 2002 - 21:27 #16
...fortæl.... :)
Avatar billede erikjacobsen Ekspert
27. oktober 2002 - 21:29 #17
Nå, de krydsede hinanden. Næh - ingen vamle ekspertenpoint til
mig. Det er li'som med lakridskonfekt: den første pose smager
godt, og det gør den anden, tredie og fjerde også. Men når man
så kommer til nummer 5 - så kan jeg bare ikke mere...
Avatar billede tipsen Nybegynder
27. oktober 2002 - 21:33 #18
Erik: Det andet inputargument til window.open - title - hvad bruges det til? Sætter det en titel i det nye vindue som evt. bliver overskrevet af et <title>-tag eller evt. en http-fejl og ellers vil det blive stående?

Kan man ligesom i php skrive noget i retning af:

(udsagn der returnerer sandt eller falsk) ? "statement, hvis sand" : "statement, hvis falsk"

dvs. noget i retning af:

params += (scrollbars=='no')?'no':'yes'
Avatar billede tipsen Nybegynder
27. oktober 2002 - 21:33 #19
Jeg siger tak for hjælpen - det er rart at du er tilbage på eksperten :-)
Avatar billede erikjacobsen Ekspert
27. oktober 2002 - 21:38 #20
Ja,
  params += (scrollbars=='no')?'no':'yes'
bør virke.

Den title er ikke en titel, men navnet på vinduet.
Giver du 2 vinduer samme navn, risikerer du (lidt afhængigt
af browser) at de åbner i samme fysiske vindue. Navnet vises
ingen steder.

Jeg er ikke tilbage på eksperten.dk - jeg holder orlov fra
min orlov.
Avatar billede tipsen Nybegynder
27. oktober 2002 - 22:22 #21
må så svare mig selv :-/
Avatar billede tipsen Nybegynder
27. oktober 2002 - 22:22 #22
Hvis nogen kan bruge det endelige script, fik det følgende udseende:

// general purpose function to see if a suspected numeric input is a positive integer
function isPosInteger(inputVal) {
    inputStr = inputVal.toString()
    for (var i = 0; i < inputStr.length; i++) {
        var oneChar = inputStr.charAt(i)
        if (oneChar < "0" || oneChar > "9") {
            return false
        }
    }
    return true
}
/*
the function LB (LaunchBrowser) takes the following arguments:
url:        URL to open
title:        Title of new window
width:        pixels width of window
height:        pixels height of window
location:    Show locationbar (yes|no)
menubar:    Show the menubar (yes|no)
scrollbars:    Show the scrollbars (yes|no)
status:        Show the statusbars (yes|no)
titlebar:    Show the titlebar (yes|no)
toolbar:    Show the toolbar (yes|no)
resizable:  Can you resize the window (yes|no)
directories:Show the personal toolbar (yes|no)
*/

function LB(url, title, width, height, titlebar, resizable, statusbar, locationbar, menubar, scrollbars, toolbar, directorybar) {
    params = ''
    params += 'titlebar=' + ((titlebar=='yes') ? 'yes' : 'no')
    params += ',resizable=' + ((resizable=='yes') ? 'yes' : 'no')
    params += ',status=' + ((statusbar=='yes') ? 'yes' : 'no')
    params += ',locationbar=' + ((locationbar=='yes') ? 'yes' : 'no')
    params += ',menubar=' + ((menubar=='yes') ? 'yes' : 'no')
    params += ',scrollbars=' + ((scrollbars=='yes') ? 'yes' : 'no')
    params += ',toolbar=' + ((toolbar=='yes') ? 'yes' : 'no')
    params += ',directories=' + ((directorybar=='yes') ? 'yes' : 'no')
    params += (isPosInteger(width)) ? ',width=' + width : ''
    params += (isPosInteger(height)) ? ',height=' + height : ''
    window.open(url, title, params)
}
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