Wereldwijd var in Javascript

Dit irriteert me.

Ik stel een array in aan het begin van het document:

 var idPartner;

 var myar = new Array();
 myar[0] = "http://site.com/"+idPartner;

En ik krijg een nummer over het adres, wat het ID van de partner is. Super goed. Maar ik probeer het zonder succes in te stellen:

 $.address.change(function(event) {
   idPartner = 3;
   alert(idPartner);
 }

OK. De waarschuwing geeft me het juiste aantal, maar stelt het niet in.

Wat is er mis?

Bedankt!

0
Gebruik [] letterlijke notatie in plaats van nieuwe array . (Het lost dit specifieke probleem niet op, maar is hoe dan ook beter).
toegevoegd de auteur hugomg, de bron
Veroorzaken im proberen toegang tot de url set op myar [0] met de id, maar werkt niet. Het geeft me ongedefinieerd.
toegevoegd de auteur Lucas Veiga, de bron
Kun je proberen het probleem te reproduceren in een jsfiddle.net ?
toegevoegd de auteur Alex Turpin, de bron
als de waarschuwing u het juiste nummer geeft, is deze ingesteld! Ik ben in de war. waarom denk je dat het niet is ingesteld?
toegevoegd de auteur Andy, de bron
@Lucas Veiga Ik zal voorstellen om te gaan gebruiken "var myar = [];" voor arrays.
toegevoegd de auteur Bakudan, de bron
Hoe wordt het juiste nummer gewaarschuwd, maar niet ingesteld?
toegevoegd de auteur Jack, de bron

4 antwoord

Als u de waarde van de variabele wijzigt, worden de waarden in de array niet opnieuw ingesteld. Dat is gewoon iets dat JavaScript niet automatisch kan doen. Je zou de array opnieuw moeten genereren om de nieuwe id te hebben. Zou u de ID kunnen toevoegen aan de waarde waar u de array gebruikt in plaats van de waarden vooraf in te stellen in de array met de id?

Bewerken: u zou bijvoorbeeld:

var myArray = [];
var myId = 0;
myArray[0] = "http://foo.com/id/";

en wanneer u een waarde uit de array moet gebruiken, doet u het volgende:

var theVal = myArray[0] + myId;
4
toegevoegd
Al in de dag had ALGOL een naam-voor-naam optie waarmee dit soort dingen konden worden gedaan. Raar, uh?
toegevoegd de auteur hugomg, de bron
Super goed. Was het. Ik heb een functie gemaakt om deze voor mij in te stellen met de ID die ik wil. Bedankt!
toegevoegd de auteur Lucas Veiga, de bron

Probeer dit:

var myvar = ["http://site.com/"];


$.address.change(function(event) {
   myvar[1] = 3;
 }

gebruik dan myvar.join() waar je de volledige URL nodig hebt.

1
toegevoegd

Het probleem hier is dat aan de lijn

myar[0] = "http://site.com/"+idPartner;

..je voert een string-aaneenschakeling uit, wat betekent dat je de resulterende string kopieert naar de array op indexpositie 0.

Daarom heeft het bij het later instellen van idPartner geen effect op de eerder gekopieerde reeks. Om een ​​dergelijk effect te voorkomen, kunt u de reeks altijd opnieuw construeren wanneer de variabele idPartner wordt bijgewerkt of u maakt een object en evalueert het wanneer u het nodig hebt, zoals ...

var MyObject = function(){
   this.idPartner = 0; //default value
};

MyObject.prototype.getUrl = function(){
   return "http://site.com/" + this.idPartner;
};

Op deze manier zou je het kunnen gebruiken

var myGlblUrlObj = new MyObject();

$.address.change(function(event){
   myGlblUrlObj.idPartner = ... /setting it here
});

op een later tijdstip kun je dan altijd de juiste URL gebruiken

myGlblUrlObj.getUrl();

Nu hangt het natuurlijk af van de complexiteit van uw situatie. Misschien kan de voorgestelde array-oplossing ook werken, hoewel ik er de voorkeur aan geef hem ergens in een object te laten inkapselen voor een betere herbruikbaarheid.

0
toegevoegd
myar[0] = "http://site.com/" + idPartner;

Na deze regel myar [0] = "http://site.com/undefined" heeft het niets meer te maken met de variabele idPartner .

Dus, daarna zal het veranderen van de waarde van idPartner de waarde van myar [0] beïnvloeden.

U moet zelf de waarde van myar [0] wijzigen.

0
toegevoegd