Javascript fungerar inte i Explorer, men i Firefox

Tråden skapades och har fått 6 svar. Det senaste inlägget skrevs .
1

Har problem med följande javascript. Det fungerar i firefox men inte i Internet Explorer.

Skriptet skickar ett värde från en popupruta (som initieras från huvudfönstret) till en listbox i huvudfönstret. I skriptet nedan skall en rad läggas till i listboxen med HH-text.

Någon som förstår varför det inte fungerar med Explorer? Har sökt mig galen på nätet...

function addSelectedItemsToParent() {
var txt = "HH-text"
var value= "HH-value";
addOption = new Option(txt, value);
numItems = self.opener.document.vbform.nyhetsbild.length;
self.opener.document.vbform.nyhetsbild.options[numItems++] = addOption;
return true;
window.close()
} 
  • Medlem
  • Malmö
  • 2007-01-01 17:49

För det första bör du lägga till semikolon i slutet på raderna 2 och 8 i din kod... det gör säkerligen ingenting felaktigt i hur koden tolkas dock... de brukar vara ganska förlåtande mot sådant.

Jag gissar på att de tolkar self.opener olika... när jag skapar liknande kod i popup brukar jag använda window.opener istället... det är inte alls säkert att det beror på det, men det skadar ju inte att testa.

EDIT: Förresten, jag kom på en sak... testa att inte köra numItems++... du ska ju lägga till ett element på sista positionen och behöver då inte addera ett till elementet. Indexeringen är ju 0, 1, 2 (börjar alltså på noll). Och attributet length är ju ett högre än sista elementet redan.

Ursprungligen av Timber:

För det första bör du lägga till semikolon i slutet på raderna 2 och 8 i din kod... det gör säkerligen ingenting felaktigt i hur koden tolkas dock... de brukar vara ganska förlåtande mot sådant.

ECMA-standarden anger faktiskt att semikolon är frivilliga, JS är i grunden radorienterat. Så länge en rad inte innehåller oavslutade uttryck, t.ex. något som slutar med ett plus, ska radens innehåll räknas som ett komplett uttryck även utan semikolon. Alla webbläsare jag känner till fungerar på det sättet, men konventionen bland JS-kodare brukar vara att använda semikolon ändå.

  • Medlem
  • Mölndal
  • 2007-01-01 18:32

Kan inte heller på rakt arm se varför det inte funkar. Men lägg till en

alert(VariablenDuJustTilldelat);

efter varje rad för att se hur långt du kommer. När du hittat raden kan du dela upp den ytterligare:

alert(self);
alert(self.opener);
alert(self.opener.document.);

osv.

Tack för snabba svar!

Ursprungligen av Bulgakov:
self.opener.document.vbform.nyhetsbild.options[numItems++] = addOption;

Provade med Alert och det tycks som om felet ligger i denna rad. "Anropet" till "huvudfönstret" fungerar bra i första fallet då den tar reda på antalet rader i listboxen (se nedan).

numItems = self.opener.document.vbform.nyhetsbild.length;

Får söka vidare, men om ni har fler idéer så tar jag mer än gärna emot dem.

Felet är avhjälpt efter mycket sökande. Det är tydligen inte fel på koden, utan det är Microsoft som stängt av cross-window form option updating. Troligen av säkerhetsskäl,

Det gick dock att komma runt detta genom att skriptet som gör själva uppdateringen i listboxen exekveras i huvudfönstret och att bara värdena hämtas från Pop-up fönstret.

http://www.codingforums.com/showthread.php?t=759.

Senast redigerat 2007-01-02 23:50
  • Medlem
  • Mölndal
  • 2007-01-02 23:19

En annan konvention är att vara konsekvent med om man använder semikolon eller ej.

Själv tycker jag det ligger nära till hands att alltid göra det, eftersom språket i övrigt så tydligt har C-famlijens syntax.

1
Bevaka tråden