Avatar billede bars Nybegynder
29. august 2006 - 11:24 Der er 37 kommentarer og
1 løsning

Hvordan fanger jeg en GET uden en form?

jeg har en side med et link som dette:
<a href="side.htm?var='tekst'">link</a>

på side.htm vil jeg gerne lave noget javascript ala dette:
if(den get tekst == den her tekst){skriv en ny tekst}

Jeg mangler bare noget lidt mere brugbar kode :)
Avatar billede mclemens Nybegynder
29. august 2006 - 11:51 #1
http://www.eksperten.dk/spm/728798#rid6402035 ...


<script type="text/javascript">

var _GET={}; /* global object til opbevaring af dokument variabler... */

vars=window.location.href;

if(vars.indexOf("?")!=-1)vars=vars.replace(/\+/g," ").replace(/.*?\?/,"").split("&");
else vars=[];

for(i=0;i<vars.length;i++){
  vars2=vars[i].split("=");
  _GET[unescape(vars2[0])]=unescape(vars2[1]);
}


if(_GET['var'])alert("var i get havde værdien:"+_GET['var']);

</script>
Avatar billede mclemens Nybegynder
29. august 2006 - 11:54 #2
f.eks.:


<!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 validate() {
  f=document.namepaaformularen;
  for(i=7;tn=f["FEJL_"+i];i++)if (tn.value != "") {
    alert("FEJL_"+i+" - Tekstfelt er ikke tomt");
  }
}



var _GET={}; /* global object til opbevaring af dokument variabler... */

vars=window.location.href;

if(vars.indexOf("?")!=-1)vars=vars.replace(/\+/g," ").replace(/.*?\?/,"").split("&");
else vars=[];

for(i=0;i<vars.length;i++){
  vars2=vars[i].split("=");
  _GET[unescape(vars2[0])]=unescape(vars2[1]);
}

</script>

</head><body>


<script type="text/javascript">
if(_GET['var'])document.write("<br>car - var sat");
else document.write("var - var ikke sat");
</script>
</body></html>
Avatar billede mclemens Nybegynder
29. august 2006 - 11:55 #3
function validate() {
  f=document.namepaaformularen;
  for(i=7;tn=f["FEJL_"+i];i++)if (tn.value != "") {
    alert("FEJL_"+i+" - Tekstfelt er ikke tomt");
  }
}

^ - slet lige den del ... det var fra en anden løsning (lå lige i mit test document)
Avatar billede mclemens Nybegynder
29. august 2006 - 11:56 #4
( det jeg glemte at slette var fra denne tråd spm/729029 )
Avatar billede softspot Forsker
29. august 2006 - 12:00 #5
Der findes et objekt på window-objektet som hedder location. På dette objekt findes der endnu et objekt som hedder search og her kan du finde de informationer som sendes i querysting til en side...

Prøv at udskrive window.location.search:

alert(window.location.search);

så kan du nok se et mønster. Du kan finde mere information om dette objekt og dets metoder på MSDN: http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/properties/search.asp

Jeg skulle mene at du kan splitte parameterstrengen op således:

var pars = window.location.search.substr(1).split('&');

Så skulle den være lige til at løbe igenne med en løkke

for(var i=0; i < pars.length; i++) {
  var parCmp = pars[i].split('=');
  if(parCmp[0].toLowerCase() == "var" && parCmp[1] == "den her tekst")
    alert("En ny tekst");
}
Avatar billede mclemens Nybegynder
29. august 2006 - 12:15 #6
En forkortelse til search iflg. sofspots kommentar...



<!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">
var _GET={};

vars=window.location.search.substr(1).split("&");

for(i=0;i<vars.length;i++){
  vars2=vars[i].split("=");
  _GET[unescape(vars2[0])]=unescape(vars2[1]);
}

</script>

</head><body>


<script type="text/javascript">
if(_GET['var'])document.write("<br>var - var sat");
else document.write("var - var ikke sat");
</script>


<a href="test.html?var=2">a</a>
</body></html>
Avatar billede mclemens Nybegynder
29. august 2006 - 12:16 #7
unescape da variabel og variabel værdi kan være url'encoded...
Avatar billede mclemens Nybegynder
29. august 2006 - 12:19 #8
Husk at kaste et svar softspot ...
Avatar billede mclemens Nybegynder
29. august 2006 - 12:20 #9
if(_GET['var']) i min burde være
if(_GET['var']=="den her tekst")
Avatar billede bars Nybegynder
29. august 2006 - 12:23 #10
Tak for hurtige og gode svar... jeg er lige ved at få det integreret, så vender jeg tilbage
Avatar billede softspot Forsker
29. august 2006 - 12:24 #11
Når nu du laver sådan et fint objekt, så ville det være nærliggende (og mere intuitivt) at bruge dot-notationen til at referere parameteren (specielt da vi kender navnet på den parameter vi vil checke):

<script type="text/javascript">
if(_GET.var)
  document.write("<br>var - var sat");
else
  document.write("<br>var - var ikke sat");
</script>

Men ellers kan jeg ikke lige sætte fingeren på noget ved dit eksempel, mclemens :)
Avatar billede softspot Forsker
29. august 2006 - 12:26 #12
Jf. mclemens' indlæg 29/08-2006 12:20:58, skal der så konsekvensrettes i min indføjelse:

<script type="text/javascript">
if(_GET.var && _GET.var == "den her tekst")
  document.write("<br>var - var sat");
else
  document.write("<br>var - var ikke sat");
</script>
Avatar billede mclemens Nybegynder
29. august 2006 - 12:26 #13
Oki, det er selvfølgelig også lidt nemmere :o)
(valgte bare selv [' og '] da det mindede om php ...)
Avatar billede mclemens Nybegynder
29. august 2006 - 12:27 #14
og <a href="test.html?var=2">a</a>
-> <a href="test.html?var=den her tekst">a</a>
Avatar billede mclemens Nybegynder
29. august 2006 - 12:27 #15
<script type="text/javascript">
if(_GET.var == "den her tekst")
  document.write("<br>var - var sat");
else
  document.write("<br>var - var ikke sat");
</script>

(_GET.var &&  var ikke nødvendigt ... den melder jo undefined hvis den ikke er der)
Avatar billede softspot Forsker
29. august 2006 - 12:33 #16
Hvis man skulle være rigtig krakilsk, så kunne man argumentere for at en parameterværdi som var undefined kunne give nogle problemer. Derfor vil jeg måske endda udvide checket ved at indføre typeof-check:

<script type="text/javascript">
if(typeof _GET.var != "undefined" && _GET.var == "den her tekst")
  document.write("<br>var - var sat");
else
  document.write("<br>var - var ikke sat");
</script>

Så burde det også være muligt at kalde siden således:

<a href="test.html?var=undefined">a</a>

Jeg ved godt det er en usandsynlig situation, men bare for en god orden skyld... :)
Avatar billede mclemens Nybegynder
29. august 2006 - 12:41 #17
har lige testet . vs []:


<!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">
var _GET={};

vars=window.location.search.substr(1).split("&");

for(i=0;i<vars.length;i++){
  vars2=vars[i].split("=");
  _GET[unescape(vars2[0])]=unescape(vars2[1]);
}


</script>


</head><body>

<script type="text/javascript">
if(_GET['var'] == "den her tekst")
  document.write("<br>var - var sat");
else
  document.write("<br>var - var ikke sat");
</script>


<a href="test.html?var=den her tekst">a</a>
</body></html>


^ den virker ... denne her gør ikke:



<!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">
var _GET={};

vars=window.location.search.substr(1).split("&");

for(i=0;i<vars.length;i++){
  vars2=vars[i].split("=");
  _GET[unescape(vars2[0])]=unescape(vars2[1]);
}


</script>


</head><body>

<script type="text/javascript">
if(_GET.var == "den her tekst")
  document.write("<br>var - var sat");
else
  document.write("<br>var - var ikke sat");
</script>


<a href="test.html?var=den her tekst">a</a>
</body></html>
Avatar billede mclemens Nybegynder
29. august 2006 - 12:42 #18
men var er jo også reserveret i denne sammenhæng :o)
Avatar billede softspot Forsker
29. august 2006 - 12:44 #19
God pointe :)
Avatar billede mclemens Nybegynder
29. august 2006 - 12:44 #20
udvidet med softspot's kommentar:




<!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">
var _GET={};

vars=window.location.search.substr(1).split("&");

for(i=0;i<vars.length;i++){
  vars2=vars[i].split("=");
  _GET[unescape(vars2[0])]=unescape(vars2[1]);
}


</script>


</head><body>

<script type="text/javascript">
if(_GET['var']!=undefined && _GET['var']=="undefined")
  document.write("<br>var - var sat");
else
  document.write("<br>var - var ikke sat");
</script>


<a href="test.html?var=undefined">var undefined</a><br>
<a href="test.html">var ikke sat</a>
</body></html>
Avatar billede mclemens Nybegynder
29. august 2006 - 12:48 #21
Denne virkede også...

<!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">
var _GET={};

vars=window.location.search.substr(1).split("&");

for(i=0;i<vars.length;i++){
  vars2=vars[i].split("=");
  _GET[unescape(vars2[0])]=unescape(vars2[1]);
}


</script>


</head><body>

<script type="text/javascript">
if(_GET['var']=="undefined")
  document.write("<br>var - var sat");
else
  document.write("<br>var - var ikke sat");
</script>


<a href="test.html?var=undefined">var undefined</a><br>
<a href="test.html">var ikke sat</a>
</body></html>
Avatar billede mclemens Nybegynder
29. august 2006 - 12:50 #22
Hmm, synes vi lige vendte lidt tilbage igen :D
Avatar billede bars Nybegynder
29. august 2006 - 13:20 #23
det virker bare godt, men jeg har et problem mere... det som skal skrive i bodyen er egentlig ment til at skulle stå inde i et optiontag i en selectbox - hvor hvis de 2 værdier er ens skal der tilføjes "selected". Men når jeg tilføjer js-koden inde i min option vises det som tekst i selectboxen. Kan i hjælpe med det?
Avatar billede mclemens Nybegynder
29. august 2006 - 13:38 #24
test.html:



<!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">
var _GET={};

vars=window.location.search.substr(1).split("&");

for(i=0;i<vars.length;i++){
  vars2=vars[i].split("=");
  _GET[unescape(vars2[0])]=unescape(vars2[1]);
}

window.onload=function(){

  if(_GET['var']){
    sel=document.formularnavn.selecten;
    opts=sel.getElementsByTagName("option");
    for(i=0,i2=opts.length;i<i2;i++){
      if(sel[i].firstChild.nodeValue=_GET['var']){
        sel.selectedIndex=i;
        i=i2;
      }
    }
  }

}
</script>


</head><body>

<form name="formularnavn">
<select name="selecten">
<option>tryk på  knappen</option>
<option>den her tekst valgt</option>
<option>eller måske denne</option>
</select>
</form>


<a href="test.html?var=den her tekst">var den her tekst valgt ... tryk her!!!!</a><br>
<a href="test.html?var=eller måske denne">var eller måske denne ... tryk her!!!!</a><br>
</body></html>
Avatar billede mclemens Nybegynder
29. august 2006 - 13:56 #25
window.onload=function(){ // onload aktiveres funktionen her

  if(_GET['var']){ // hvis var er sat køres denne del
    sel=document.formularnavn.selecten; // laver en genvej til selecten placeres i formularen med name="formularnavn"
    opts=sel.getElementsByTagName("option"); // laver et array der indeholder en reference til alle options i selecten
    for(i=0,i2=opts.length;i<i2;i++){ // gennemløber options så længe der er nogen
      if(sel[i].firstChild.nodeValue=_GET['var']){ // hvis teksten i optionen er det samme som i var
        sel.selectedIndex=i; // sættes den option til selected
        i=i2; // og i sættes til antallet af option elementer så gennemløbet stopper
      }
    }
  }

}
Avatar billede mclemens Nybegynder
29. august 2006 - 13:59 #26
hmm, ret lige:
      if(sel[i].firstChild.nodeValue=_GET['var']){
til:
      if(opts[i].firstChild.nodeValue=_GET['var']){
Avatar billede mclemens Nybegynder
29. august 2006 - 14:01 #27
ups
if(opts[i].firstChild.nodeValue==_GET['var']){
Avatar billede mclemens Nybegynder
29. august 2006 - 14:02 #28
den kan også validere på value istedet...



<!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">
var _GET={};

vars=window.location.search.substr(1).split("&");

for(i=0;i<vars.length;i++){
  vars2=vars[i].split("=");
  _GET[unescape(vars2[0])]=unescape(vars2[1]);
}

window.onload=function(){

  if(_GET['var']){
    sel=document.formularnavn.selecten;
    opts=sel.getElementsByTagName("option");
    for(i=0,i2=opts.length;i<i2;i++){
      if(opts[i].value==_GET['var']){
        sel.selectedIndex=i;
        i=i2;
      }
    }
  }

}
</script>


</head><body>

<form name="formularnavn">
<select name="selecten">
<option value="1">tryk på  knappen</option>
<option value="2">den her tekst valgt</option>
<option value="3">eller måske denne</option>
</select>
</form>


<a href="test.html?var=2">var den her tekst valgt ... tryk her!!!!</a><br>
<a href="test.html?var=3">var eller måske denne ... tryk her!!!!</a><br>
</body></html>
Avatar billede mclemens Nybegynder
29. august 2006 - 14:03 #29
husk rettelsen i 29/08-2006 14:01:25
hvis du bruger den i 29/08-2006 13:38:50
... jeg glemte et lighedstegn i den :/
Avatar billede bars Nybegynder
29. august 2006 - 14:08 #30
Det er fint at den ikke validerer på value, for den bliver brugt til noget andet, det ser ud til at virke fint. Er lige igang med at integrere det i min side.
Avatar billede olebole Juniormester
29. august 2006 - 14:35 #31
<ole>

mclemens >> du skal nok lige fange fejl(ene), der vil opstå, hvis der ikke står noget i location.search (hvis der ikke findes en query-streng)  ;o)

/mvh
</bole>
Avatar billede bars Nybegynder
29. august 2006 - 15:13 #32
Jeg har fået det jeg skal bruge nu, men jeg ved ikke om det er mclemens eller softspot der skal have pointene eller i skal dele dem
Avatar billede softspot Forsker
29. august 2006 - 15:21 #33
Giv dem til mclemens, det er trods alt ham der har leveret langt den største indsats i denne tråd :)
Avatar billede bars Nybegynder
29. august 2006 - 15:22 #34
ok, det gør jeg så :)
Avatar billede mclemens Nybegynder
29. august 2006 - 16:48 #35
Tak for point :o)

...

Ole, hvilke fejl - den melder ikke umiddelbart fejl hos mig ?
... men vi gør den da lige lidt betinget ...


var _GET={};

if(window.location.search){
  vars=window.location.search.substr(1).split("&");

  for(i=0;i<vars.length;i++){
    vars2=vars[i].split("=");
    _GET[unescape(vars2[0])]=unescape(vars2[1]);
  }
}
Avatar billede mclemens Nybegynder
30. august 2006 - 01:24 #36
Og tak til Softspot også :)
Avatar billede softspot Forsker
30. august 2006 - 01:44 #37
Der er ikke så meget at takke for, du gjorde som sagt langt den største indsats på dette spørgsmål - hvilket jeg synes er lækkert! :D
Avatar billede olebole Juniormester
30. august 2006 - 09:56 #38
mclemens >> Dooohhhh ... my bad! Der kan zq da ikke komme fejl! Sorry  ;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