/ Forside / Teknologi / Udvikling / Java Scripts / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java Scripts
#NavnPoint
molokyle 5410
Klaudi 2799
smorch 2439
kim 1360
Harlekin 1134
bentjuul 984
gibson 800
severino 695
Random 675
10  konsulent.. 626
Fejl i for løkke, når man skal bruge count~
Fra : Mr J..


Dato : 27-11-07 10:07

Hej Alle

Jeg har følgende:

var counteren=0;
for (counteren=0 ; counteren<=document.getElementById('max').value ;
counteren++)
{
url += "&" + counteren + "=" +
encodeURIComponent(document.getElementById(counteren).value);
}

Som bruges i ajax, problemet ligger lige her:
encodeURIComponent(document.getElementById(counteren).value);

Hvad er der galt i det, browseren siger at "et objekt er obligatorisk" og
fejler.

Loopet kører fint hvis man bare laver:

var counteren=0;
for (counteren=0 ; counteren<=document.getElementById('max').value ;
counteren++)
{
url += "&" + counteren + "=" +
encodeURIComponent(document.getElementById('max').value);
}

Ud over at $_GET['0'], $_GET['1'] osv jo kommer ud med
encodeURIComponent(document.getElementById('max').value) i php dokumentet,
og der skal den jo komme ud med de værdier der er i $_GET['0'], $_GET['1']
osv fra forrige side, hvis i forstår...

Må man ikke bruge en variabel i sit kald for at få info fra sidste side?

Er der noget i ikke kan gennemskue, så bare spørg :)

Mvh
Morten



 
 
Mr J.. (27-11-2007)
Kommentar
Fra : Mr J..


Dato : 27-11-07 11:02

Hvis jeg gør sådan, og det ikke er i en løkke virker det:

var power=0;
url += "&" + power + "=" +
encodeURIComponent(document.getElementById(power).value);

Hvorfor hulen vil den så ikke virke når den er inde i en løkke?!??! den
tager jo fint variablen med ned i starten af strengen..

Mvh
Morten



Mr J.. (27-11-2007)
Kommentar
Fra : Mr J..


Dato : 27-11-07 11:20

firebug siger:

document.getElementById("max") has no properties, men det giver jo ingen
mening..



Mr J.. (27-11-2007)
Kommentar
Fra : Mr J..


Dato : 27-11-07 11:45

Skal lige siges at "max" kommer fra en hidden fra tidligere sidem og den kan
ses i firebug, med den rigtige værdi og det hele :/

Irriterende..



Birger (27-11-2007)
Kommentar
Fra : Birger


Dato : 27-11-07 12:46

"Mr J.." <Nomail@nomail.dk> skrev i en meddelelse
news:474bf517$0$90262$14726298@news.sunsite.dk...
> Skal lige siges at "max" kommer fra en hidden fra tidligere sidem og den
> kan ses i firebug, med den rigtige værdi og det hele :/
>
> Irriterende..
>

Jeg kan ikke lige overskue, hvad det er du vil.

getElementByID() giver dig DOM-elementet med den id du beder om, f.eks.:

i HTML har du
<input type="text" id="navn" value="mig">

i script skriver du
elem_navn = document.getElementById( 'navn'); // returnerer DOM elementet
val_navn = elem_navn.value;

De fejl du får, fortæller at der i din HTML ikke findes et element med
id="counter".

Hvis du har de elementer i HTML - altså id="0", id ="1", osv, er der
formentlig et problem i at din counter er et tal, mens id'erne er tal.

Prøv evt. at give id="nr0", id="nr1" etc.
og ret dit script til
getElementByID( 'nr'+counter)

Ellers må du prøve at forklare, hvad det er du ønsker at opnå, og ikke bare
hvad du mener der går galt ;>)

Birger



Mr J.. (27-11-2007)
Kommentar
Fra : Mr J..


Dato : 27-11-07 14:04

Hej Birger

Det hjalp ikke.. Det jeg vil:
AJAX laver en bunke checkbox'es ud fra et søgefelt, og dvs at mængden af
checkbokses altid er forskellige, og de får en id fra "nr0" til
"nrUendeligt" så jeg skal jo i mit javascript have informationen med over
til mit backend script. Derfor laver jeg den FOR i det js. for at finde ud
af hvor mange checkboxes der er lavet bliver antallet lagt ind i en hidden,
html kan ses her:


<html>
<head>
</head>
<body>
<input id="navn1" type="text" onkeyup="doSearch1();" size="12"/>
<input id="nr" type="hidden" value="1"/>
<div id="answer1" style="display: inline; font-size: 16px;"/>
<input type="hidden" value="1" name="holdid"/>
<br/>
<input id="navn2" type="text" onkeyup="doSearch2();" size="12"/>
<input id="nr" type="hidden" value="2"/>
<div id="answer2" 16px="" font-size:="">
<input type="checkbox" value="6479" name="nr0"/>
æbler
<br/>
<input type="checkbox" value="6270" name="nr1"/>
bananer
<br/>
<input type="checkbox" value="6215" name="nr2"/>
jordbær
<br/>
<input type="checkbox" value="6411" name="nr3"/>
kirsebær
<br/>
<input type="hidden" value="13" name="max"/>
<input id="button" type="button" onclick="doTransfer1();" value="Tilføj
elev(er)"/>
</div>
<br/>
<br/>
<br/>
<div id="list" 16px="" font-size:=""/>
<div id="list1" 16px="" font-size:=""/>
</body>
</html>


Og så kommer JavaScript delen her (den nødvendige del kun):

function doTransfer1(){
var url = "backend4.php?max=" +
encodeURIComponent(document.getElementById('max').value);

var power=0;
for (power=0 ; power <= document.getElementById('max').value ; power++)
{
url += "&" + power + "=" + encodeURIComponent(document.getElementByID(
'nr'+power).value);
}
url += "&time=" + Math.random();
http.open("GET", url, true);
http.onreadystatechange = handleHttpResponse3;
http.send(null);
}


Jeg kan ikke se hvorfor det ikke skulle fungere...

Mvh
Morten



Mr J.. (27-11-2007)
Kommentar
Fra : Mr J..


Dato : 27-11-07 14:11

hvis jeg ændre til:

function doTransfer1(){
var url = "backend4.php?max=" +
encodeURIComponent(document.getElementById('max').value);

var power=0;
for (power=0 ; power <= document.getElementById('max').value ; power++)
{
url += "&" + power + "=" + power;
}
url += "&time=" + Math.random();
http.open("GET", url, true);
http.onreadystatechange = handleHttpResponse3;
http.send(null);
}


så virker lykken fint... det er lige så snart den sætning er INDE i løkken
at den fejler, uden for løkken kan jeg godt lave en

var power=0;
url += "&" + power + "=" + encodeURIComponent(document.getElementByID(
'nr'+power).value);

Og så virker der fint...

Jeg er ved at blive vanvittig :D

Mvh
Morten



Mr J.. (27-11-2007)
Kommentar
Fra : Mr J..


Dato : 27-11-07 14:12

Og så virker DET fint... skulle der jo stå :D



Birger (27-11-2007)
Kommentar
Fra : Birger


Dato : 27-11-07 15:09

"Mr J.." <Nomail@nomail.dk> skrev i en meddelelse
news:474c15ce$0$90267$14726298@news.sunsite.dk...
> Hej Birger
>
> Det hjalp ikke.. Det jeg vil:
> AJAX laver en bunke checkbox'es ud fra et søgefelt, og dvs at mængden af
> checkbokses altid er forskellige, og de får en id fra "nr0" til
> "nrUendeligt" så jeg skal jo i mit javascript have informationen med over
> til mit backend script. Derfor laver jeg den FOR i det js. for at finde ud
> af hvor mange checkboxes der er lavet bliver antallet lagt ind i en
> hidden, html kan ses her:
>
>
> <html>
> <head>
> </head>
> <body>
> <input id="navn1" type="text" onkeyup="doSearch1();" size="12"/>
> <input id="nr" type="hidden" value="1"/>
> <div id="answer1" style="display: inline; font-size: 16px;"/>
> <input type="hidden" value="1" name="holdid"/>
> <br/>
> <input id="navn2" type="text" onkeyup="doSearch2();" size="12"/>
> <input id="nr" type="hidden" value="2"/>
> <div id="answer2" 16px="" font-size:="">
> <input type="checkbox" value="6479" name="nr0"/>
> æbler
> <br/>
> <input type="checkbox" value="6270" name="nr1"/>
> bananer
> <br/>
> <input type="checkbox" value="6215" name="nr2"/>
> jordbær
> <br/>
> <input type="checkbox" value="6411" name="nr3"/>
> kirsebær
> <br/>
> <input type="hidden" value="13" name="max"/>
> <input id="button" type="button" onclick="doTransfer1();" value="Tilføj
> elev(er)"/>
> </div>
> <br/>
> <br/>
> <br/>
> <div id="list" 16px="" font-size:=""/>
> <div id="list1" 16px="" font-size:=""/>
> </body>
> </html>
>
>
> Og så kommer JavaScript delen her (den nødvendige del kun):
>
> function doTransfer1(){
> var url = "backend4.php?max=" +
> encodeURIComponent(document.getElementById('max').value);
>
> var power=0;
> for (power=0 ; power <= document.getElementById('max').value ; power++)
> {
> url += "&" + power + "=" +
> encodeURIComponent(document.getElementByID( 'nr'+power).value);
> }
> url += "&time=" + Math.random();
> http.open("GET", url, true);
> http.onreadystatechange = handleHttpResponse3;
> http.send(null);
> }
>
>
> Jeg kan ikke se hvorfor det ikke skulle fungere...
>
> Mvh
> Morten
>

3 ting.
Først har du to input elementer, der begge har id="nr". Det må man ikke.

Det andet, er nok det giver dig alt det bøvl... ;>)
Du har 4 liner med id="nrX", men du checker 14?
Så de sidste 10, vil alle sammen giv dig fejl.
Der er noget med id, name og om du er inde i eller udenfor en <form>....
id og name er nogen gange det samme - andre ikke.
Du giver alle checkboxe name, og forsøger at finde dem efter id. Og den går
ikke (ikke altid, i hvert fald).
(Mener i nogle doc-typer at id og name under bestemte betingelser optager
samme "plads" i elementet, så man faktisk ikke kan kalde dem noget
forskelligt - til gengæld bruge hvilken af dem man har lyst til. Det er dog
næppe noget man skal basere sin programmering på).

Du skal bruge resultaterne til AJAX, og her er det udemærket at bruge id.
Men så skal du give elementerne (HTML tags) id og ikke name (evt. begge).
Du _kan_ også bruge name - så skal du bruge getElementsByName() i stedet for
getElementById() til at finde elementerne.
Det vil så komplicere tingene - name skal ikke absolut være eentydig som id
skal, hvorfor getElementsByName returnerer en liste, (også når der kun er
een - og derfor 's'et efter Element i den ene og ikke den anden) som du så
vil skulle indeksere i, for at få det element du er efter.
Du kan også give alle checkboxene det samme navn, og bruge
getElementsByName(), til at generere en liste med dem alle, som du så kan gå
igennem.


Den php der generer checkboxene, bør skrive det rigtige antal i max.
I øvrigt, behøver du ikke kende max:
power=0;
while ( elm = document.getElementByID( 'nr'+power)) {
url += "&" + power + "=" + encodeURIComponent(elm.value);
power++;
}
skulle vist virke.

Eller, hvis du giver alle checkboxene samme name:
box_list = document.getElementsByName( 'navnet');
for ( power = 0; power < box_list.length; power++) {
url += "&" + power + "=" + encodeURIComponent( box_list(power).value);
}
Den skulle også gøre det.

For god ordens skyld, er ingen af eksemplerne testet.

Birger



Mr J.. (27-11-2007)
Kommentar
Fra : Mr J..


Dato : 27-11-07 15:23

> 3 ting.
> Først har du to input elementer, der begge har id="nr". Det må man ikke.

haha gammelt lævn er nu fjernet :)

> Det andet, er nok det giver dig alt det bøvl... ;>)
> Du har 4 liner med id="nrX", men du checker 14?

Nej jeg gad bare ikke finde på 14 frugtnavne, så i fik ikke alle linier :D

> Du kan også give alle checkboxene det samme navn, og bruge
> getElementsByName(), til at generere en liste med dem alle, som du så kan
> gå igennem.

YES BABY !!! det var det der lavede fejlen.. argh, jeg må sætte mig ned og
lære JS og DOM fra bunden af kan jeg godt se ellers bliver det jo en lang
død..

> Den php der generer checkboxene, bør skrive det rigtige antal i max.
> I øvrigt, behøver du ikke kende max:
> power=0;
> while ( elm = document.getElementByID( 'nr'+power)) {
> url += "&" + power + "=" + encodeURIComponent(elm.value);
> power++;
> }
> skulle vist virke.

Uhh ja det var jo noget smartere, men skal jo bruge max igen henne i backend
alligevel..

> Eller, hvis du giver alle checkboxene samme name:
> box_list = document.getElementsByName( 'navnet');
> for ( power = 0; power < box_list.length; power++) {
> url += "&" + power + "=" + encodeURIComponent( box_list(power).value);
> }
> Den skulle også gøre det.
>
> For god ordens skyld, er ingen af eksemplerne testet.

1000tak Birger, som altid dejlige svar med ting i der gør at man
liiiiggggeee skal prøve lidt andre metoder også :)

Mvh
Morten



Mr J.. (27-11-2007)
Kommentar
Fra : Mr J..


Dato : 27-11-07 15:40

> YES BABY !!! det var det der lavede fejlen.. argh, jeg må sætte mig ned og
> lære JS og DOM fra bunden af kan jeg godt se ellers bliver det jo en lang
> død..

suk, glæden var kort... nu fejler scriptet ikke, men jeg får igenting med
over i get til min backend php..

Nå men må lige fedte lidt rundt med det..

Mvh
Morten



Mr J.. (28-11-2007)
Kommentar
Fra : Mr J..


Dato : 28-11-07 12:55

Det er kogt ned til at fejlen er:

for (power=0 ; power <=
encodeURIComponent(document.getElementById('max').value) ; power++)
{
url += "&" + power + "=" +
encodeURIComponent(document.getElementById(power).value);

}

Når man bruger encodeURIComponent(document.getElementById(power).value); så
virker det bare ikke når der står variablen power står i linien.


Laver man det sådan her virker det:
var testerx = 0;
url += "&" + testerx + "=" +
encodeURIComponent(document.getElementById(testerx).value);

Men man kan bare ikke bruge en variabel inde i en for på den måde åbenbart..

Jeg må jo prøve noget while eller ligende...

skod JS... :D

Mvh
Morten




Birger (28-11-2007)
Kommentar
Fra : Birger


Dato : 28-11-07 13:58

"Mr J.." <Nomail@nomail.dk> skrev i en meddelelse
news:474d5704$0$90276$14726298@news.sunsite.dk...
> Det er kogt ned til at fejlen er:
>
> for (power=0 ; power <=
> encodeURIComponent(document.getElementById('max').value) ; power++)
> {
> url += "&" + power + "=" +
> encodeURIComponent(document.getElementById(power).value);
>
> }
>
> Når man bruger encodeURIComponent(document.getElementById(power).value);
> så virker det bare ikke når der står variablen power står i linien.
>
>
> Laver man det sådan her virker det:
> var testerx = 0;
> url += "&" + testerx + "=" +
> encodeURIComponent(document.getElementById(testerx).value);
>
> Men man kan bare ikke bruge en variabel inde i en for på den måde
> åbenbart..
>
> Jeg må jo prøve noget while eller ligende...
>
> skod JS... :D
>
> Mvh
> Morten
>
>
>

Hej Morten.
Jo, man kan godt bruge en variabel på den måde i en for løkke.

Måske er der et problem, at variablen er et tal, mens det du bruger den til,
forventer en streng - men JS plejer at være ret god til at typecaste, så det
er næppe det.

Du starter din løkke med 0 - sikker på sidste element ikke er max-1?
encodeURIComponent() er til URI/URL brug - overflødig i en lokal for-løkke.

Prøv at se hvornår det går galt - evt. ved en alert() inde i din løkke.
for (power=0 ; power <= document.getElementById('max').value ; power++) {
p_val = encodeURIComponent(document.getElementById(power).value);
alert( power+'\n'+p_val);
url += "&" + power + "=" + p_val;
}
Så kan du se hvornår det går galt.

Birger



Mr J.. (28-11-2007)
Kommentar
Fra : Mr J..


Dato : 28-11-07 14:18

> Hej Morten.
> Jo, man kan godt bruge en variabel på den måde i en for løkke.

Ja det ved jeg nu.. ;)

> Måske er der et problem, at variablen er et tal, mens det du bruger den
> til, forventer en streng - men JS plejer at være ret god til at typecaste,
> så det er næppe det.

Nej er heller ikke problemet.. ;)

> Du starter din løkke med 0 - sikker på sidste element ikke er max-1?

Jo det er jeg nu, og det var fejlen... damn JS er da konsekvent med fejl...
laver man den fejl i php, bumler den bare videre, og man får max en fejl
hvis de er slået til, hvorfor er JS så konsekvent?

> encodeURIComponent() er til URI/URL brug - overflødig i en lokal
> for-løkke.
>
> Prøv at se hvornår det går galt - evt. ved en alert() inde i din løkke.
> for (power=0 ; power <= document.getElementById('max').value ; power++) {
> p_val = encodeURIComponent(document.getElementById(power).value);
> alert( power+'\n'+p_val);
> url += "&" + power + "=" + p_val;
> }
> Så kan du se hvornår det går galt.

Jeps fedt trick :D
Det må jeg lige putte i gemmeren...

1000tak for hjælpen Birger... vidste ikke at JS gik amok over sådan en lille
fejl..

Mvh
Morten



Birger (28-11-2007)
Kommentar
Fra : Birger


Dato : 28-11-07 14:52

"Mr J.." <Nomail@nomail.dk> skrev i en meddelelse
news:474d6a7f$0$90269$14726298@news.sunsite.dk...
>> Hej Morten.
>> Jo, man kan godt bruge en variabel på den måde i en for løkke.
>
> Ja det ved jeg nu.. ;)
>
>> Måske er der et problem, at variablen er et tal, mens det du bruger den
>> til, forventer en streng - men JS plejer at være ret god til at
>> typecaste, så det er næppe det.
>
> Nej er heller ikke problemet.. ;)
>
>> Du starter din løkke med 0 - sikker på sidste element ikke er max-1?
>
> Jo det er jeg nu, og det var fejlen... damn JS er da konsekvent med
> fejl... laver man den fejl i php, bumler den bare videre, og man får max
> en fejl hvis de er slået til, hvorfor er JS så konsekvent?
>
>> encodeURIComponent() er til URI/URL brug - overflødig i en lokal
>> for-løkke.
>>
>> Prøv at se hvornår det går galt - evt. ved en alert() inde i din løkke.
>> for (power=0 ; power <= document.getElementById('max').value ; power++) {
>> p_val = encodeURIComponent(document.getElementById(power).value);
>> alert( power+'\n'+p_val);
>> url += "&" + power + "=" + p_val;
>> }
>> Så kan du se hvornår det går galt.
>
> Jeps fedt trick :D
> Det må jeg lige putte i gemmeren...
>
> 1000tak for hjælpen Birger... vidste ikke at JS gik amok over sådan en
> lille fejl..
>
> Mvh
> Morten
>

;>)
Det er nemmere at finde fejlene der hvor de er, end at skulle rode baglæns
gennem koden, for at finde et sted det måske kan være.

getElementById( 'id') returnerer det element der har det id du beder om.
I virkeligheden går det først galt, når du beder om value for elementet -
for elementet eksisterer ikke.
(se while løkken fra i går ;>))

Birger



Mr J.. (28-11-2007)
Kommentar
Fra : Mr J..


Dato : 28-11-07 15:02

> Det er nemmere at finde fejlene der hvor de er, end at skulle rode baglæns
> gennem koden, for at finde et sted det måske kan være.

True...

> getElementById( 'id') returnerer det element der har det id du beder om.
> I virkeligheden går det først galt, når du beder om value for elementet -
> for elementet eksisterer ikke.
> (se while løkken fra i går ;>))

Ja men while fra igår virker bare heller ikke...

Og med den for jeg har lavet nu, giver den mig bare ALLE checkbox værdierne,
om de er checked eller ej.. så skal lige se hvordan man får js til at se om
de er checked eller ej..

Mvh
Morten



Mr J.. (28-11-2007)
Kommentar
Fra : Mr J..


Dato : 28-11-07 15:10

> Og med den for jeg har lavet nu, giver den mig bare ALLE checkbox
> værdierne, om de er checked eller ej.. så skal lige se hvordan man får js
> til at se om de er checked eller ej..

hehe var jo nemt at løse :D

Mvh
Morten



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408914
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste