[JS] Url bewerken mbv indexOf

Pagina: 1
Acties:

  • Sjoerd
  • Registratie: December 2003
  • Niet online
Even wat code posten om te beginnen

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function check(veld){
nr = document.form.elements[veld].selectedIndex; //het nummer
naam = document.form.database[nr].value;  //de waarde van het geselecteerde item
huidigeurl=location.href;

if (huidigeurl.indexOf("?")==-1){
alert("geen vars in url");
urlmetvar=huidigeurl + "?"+veld+"=" + naam; //var geven
location.href=urlmetvar;
}else{
alert("wel vars in url");
varlengte=veld.length+naam.length+1; //totale lengte vanaf het ? in de url daarom +1 
urlzondervar=(huidigeurl.substring(varlengte));r
location.href=urlzondervar;
};


Even uitgelegd wat de code doet zodat je hem niet moet doorspitten:
er wordt een waarde uit een select gehaald, die wil ik aan de url toevoegen
dat lukt perfect dat wordt dan url?veld=naam

Probleem is echter dat wanneer er de 2de keer op een select wordt geduwd gebeurt er het volgende:

url?veld=naam?veld=naam

Waardoor er ik er dus 2 heb staan, nu dacht ik dit met indexOf op te lossen echter werkt dat enkel op het stuk van de url en blijken ?veld=naam niet bij de url te horen volgens javascript :+

Hoe kan ik dit nu oplossen? Dus eigenlijk het 'clearen' van de url variabelen... :)

Modelbouw - Alles over modelbouw, van RC tot diorama


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Waar hoort mijn topic?
Javascript hoort in WEB thuis.

PRG >> WEB

Daarnaast vraag ik me af waarom je dit met JS doet; een simpele GET op je form zorgt hier toch al automatisch voor?

[ Voor 39% gewijzigd door RobIII op 01-03-2007 20:21 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Sjoerd
  • Registratie: December 2003
  • Niet online
RobIII schreef op donderdag 01 maart 2007 @ 20:20:
Waar hoort mijn topic?
Javascript hoort in WEB thuis.

PRG >> WEB

Daarnaast vraag ik me af waarom je dit met JS doet; een simpele GET op je form zorgt hier toch al automatisch voor?
Een get gaat inderdaad ook werken maar ik heb verschillende selects en dan moet ik mijn form submitten en ik wil het nu even zonder forms proberen :) mocht het niet gaan doe ik het gewoon inderdaad met form submit en haal ik het er met php wel uit...

sorry voor het verkeerd posten

[ Voor 4% gewijzigd door Sjoerd op 01-03-2007 20:23 ]

Modelbouw - Alles over modelbouw, van RC tot diorama


  • Victor
  • Registratie: November 2003
  • Niet online
Ik heb een tijdje terug hier iets voor gemaakt, wellicht heb je er wat aan:

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// Get querystring
var queryString = window.location.search.substring(1).split("&"),
    parameters = [], name, value;

for (var i = 0; i < queryString.length; i++) {
    [name, value] = queryString[i].split("=");
    parameters[name] = value;
}

// Change parameter
parameters["query_string_variabele"] = "foobar";


// Set querystring
var queryString = "?";

for (var name in parameters) {
    queryString += name + "=" + parameters[name] + "&";
}

window.location.search = queryString.substring(0, queryString.length - 1);


Je kunt dus d.m.v. de associative array "parameters" je querystring aanpassen. :)

  • Sjoerd
  • Registratie: December 2003
  • Niet online
@King_Louie
erg mooi gedaan! _/-\o_ werkt perfect ook!

had ik zelf niet op kunnen komen :) (ben nog niet zolang bezig met js maar dit is precies wat ik zocht!)

Modelbouw - Alles over modelbouw, van RC tot diorama


  • Victor
  • Registratie: November 2003
  • Niet online
Ik zie trouwens dat het niet helemaal lekker gaat als je de querystring probeert op te halen terwijl deze leeg is, eerste deel moet dus als volgt worden:

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
var parameters = [];

// Get querystring
if (window.location.search) {
    var queryString = window.location.search.substring(1).split("&"),
        name, value;

    for (var i = 0; i < queryString.length; i++) {
        [name, value] = queryString[i].split("=");
        parameters[name] = value;
    }
}


Veel succes ermee :)

  • Sjoerd
  • Registratie: December 2003
  • Niet online
Het werkt echt goed alleen niet bij 2 parameters op 1 of andere manier, de 2de parameter wordt altijd gereset? lees naar parameter1 gezet.

even wat code:7

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<script language="javascript" type="text/javascript">
function check(veld){
    nrdatabase = document.form.elements['database'].selectedIndex; //het nummer
    nrtable = document.form.elements['tablenaam'].selectedIndex; //het nummer
    databasenaam = document.form.database[nrdatabase].value;  //de waarde van het geselecteerde item

if (nrtable != -1){
    tablenaam = document.form.tablenaam[nrtable].value;  //de waarde van het geselecteerde item
}else{
    tablenaam="leeg";
};
huidigeurl=location.href;

if (huidigeurl.indexOf("?")==-1){
    //nog geen variabele in de url
    urlmetvar=huidigeurl + "?"+veld+"=" + databasenaam; //var geven
    location.href=urlmetvar;
}else{
    //wel variabele al in de url
    var parameters = [];
// Get querystring

if (window.location.search) {
    var queryString = window.location.search.substring(1).split("&"),
        name, value;
    for (var i = 0; i < queryString.length; i++) {
        [name, value] = queryString[i].split("=");
        parameters[name] = value;
    }
}
// parameter die aan de url wordt toegevoegd
parameters[veld] = databasenaam,tablenaam;

//parameters[nrtable] = tablenaam;
// Set querystring
var queryString = "?";
for (var name in parameters) {
    queryString += name + "=" + parameters[name] + "&";
}
window.location.search = queryString.substring(0, queryString.length - 1);
};
}
</script>

hij wordt gereset op de laatste regel van het script.
wat er dan gebeurd is dus

url?var1=waarde1(die blijft)&var2=waarde2(maar die reset z'n eigen ineens)
dus
url?var1=waarde1(die blijft)&var2=waarde1(maar die reset z'n eigen ineens naar waarde 1)

Waaran kan dit liggen? kom er niet echt uit
de waardes worden dus gehaald uit een select ;)

Modelbouw - Alles over modelbouw, van RC tot diorama


  • Victor
  • Registratie: November 2003
  • Niet online
Allereerst: spring je code in, dit is niet leesbaar.
JavaScript:
1
2
3
if (condition) {
    // Inspringen!
}


En geef meteen aan dat het om JavaScript gaat in je code blok (code=js), zodat GoT syntax highlighting toepast.

  • Sjoerd
  • Registratie: December 2003
  • Niet online
King_Louie schreef op donderdag 01 maart 2007 @ 21:52:
Allereerst: spring je code in, dit is niet leesbaar.
JavaScript:
1
2
3
if (condition) {
    // Inspringen!
}


En geef meteen aan dat het om JavaScript gaat in je code blok (code=js), zodat GoT syntax highlighting toepast.
Oke :) ben zo gewend dat het bijvoorbeeld bij lingo of vb wel automatisch inspringt. bedankt voor de tip maakt het geheel een stuk leesbaarder zo inderdaad.

Modelbouw - Alles over modelbouw, van RC tot diorama


  • Victor
  • Registratie: November 2003
  • Niet online
Ik denk dat je niet helemaal begrepen hebt hoe je met mijn script om moet gaan, dus ik zal het even wat beter toelichten.

Allereerst gaan we kijken of er al variabelen in onze querystring staan en zo ja, dan maken we deze beschikbaar in "parameters".

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
// The querystring parameters
var parameters = [];

// Get querystring
if (window.location.search) {
    var queryString = window.location.search.substring(1).split("&"),
        name, value;

    for (var i = 0; i < queryString.length; i++) {
        [name, value] = queryString[i].split("=");
        parameters[name] = value;
    }
}


Stel, je hebt http://www.domein.tld?foo=foo als URL, dan zal je de waarde van foo zo kunnen uitlezen:

JavaScript:
1
parameters["foo"];


Wijzen:

JavaScript:
1
parameters["foo"] = "bar";


Verwijderen:

JavaScript:
1
delete parameters["foo"];


Om de wijzigde querystring vervolgens weer terug te schrijven:

JavaScript:
1
2
3
4
5
6
7
8
// Set querystring
var queryString = "?";

for (var name in parameters) {
    queryString += name + "=" + parameters[name] + "&";
}

window.location.search = queryString.substring(0, queryString.length - 1);


Het enige dat je dus hoeft te doen is zorgen dat parameters de waarden bevat die je in je querystring wilt hebben, voordat je de wijzigingen weer wegschrijft.

  • Sjoerd
  • Registratie: December 2003
  • Niet online
King_Louie schreef op donderdag 01 maart 2007 @ 22:19:
Ik denk dat je niet helemaal begrepen hebt hoe je met mijn script om moet gaan, dus ik zal het even wat beter toelichten.

Allereerst gaan we kijken of er al variabelen in onze querystring staan en zo ja, dan maken we deze beschikbaar in "parameters".

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
// The querystring parameters
var parameters = [];

// Get querystring
if (window.location.search) {
    var queryString = window.location.search.substring(1).split("&"),
        name, value;

    for (var i = 0; i < queryString.length; i++) {
        [name, value] = queryString[i].split("=");
        parameters[name] = value;
    }
}


Stel, je hebt http://www.domein.tld?foo=foo als URL, dan zal je de waarde van foo zo kunnen uitlezen:

JavaScript:
1
parameters["foo"];


Wijzen:

JavaScript:
1
parameters["foo"] = "bar";


Verwijderen:

JavaScript:
1
delete parameters["foo"];


Om de wijzigde querystring vervolgens weer terug te schrijven:

JavaScript:
1
2
3
4
5
6
7
8
// Set querystring
var queryString = "?";

for (var name in parameters) {
    queryString += name + "=" + parameters[name] + "&";
}

window.location.search = queryString.substring(0, queryString.length - 1);


Het enige dat je dus hoeft te doen is zorgen dat parameters de waarden bevat die je in je querystring wilt hebben, voordat je de wijzigingen weer wegschrijft.
stel al je moeite echt op prijs, ik ga weer even verder proberen dan :)

Modelbouw - Alles over modelbouw, van RC tot diorama


  • Victor
  • Registratie: November 2003
  • Niet online
Hmm, ik zie nu dat ik van parameters een array maak:
JavaScript:
1
var parameters = [];


Dat moet natuurlijk een object zijn:
JavaScript:
1
var parameters = {};


[/zelfcorrectie]

  • Sjoerd
  • Registratie: December 2003
  • Niet online
Was net aan het posten :) dat het gelukt is, de fout zat hem erin dat ik de verkeerde select bleek aan te spreken, en dat ik idd verkeerd om ging met de code die me zo was toegeworpen, nu werkt alles perfect! :)

Modelbouw - Alles over modelbouw, van RC tot diorama

Pagina: 1