Just nu i M3-nätverket
Gå till innehåll

Fungerar bra i IE, inte i FF


Sasja

Rekommendera Poster

Varför fungerar detta script i IE men inte i FF? Vad gör scriptet? Det är två rullgardinsmenyer med ett antal alternativ som är likadana i båda. JavaScriptet ska förhindra att de båda rullgardinsmenyerna har samma alternativ.

 

I FF händer ingenting när jag väljer samma alternativ, i IE fungerar det utmärkt!

 

<SCRIPT LANGUAGE="JavaScript">

<!--
function letadubblar(knappnamn) {

if (top.formName.vba.options.value == top.formName.hba.options.value) {
knappnamn.options[1].selected = true;
}
}
-->

</SCRIPT>
<form method="POST" name="formName">

<select size="1" name="vba" onChange="letadubblar(this)">
   <option value="A">A</option>
   <option value=""></option>
   <option value="B">B</option>
   <option value="C">C</option>
</select>

<select size="1" name="hba" onChange="letadubblar(this)">
   <option value="B">B</option>
   <option value=""></option>
   <option value="A">A</option>
   <option value="C">C</option>
</select> 

</form>

 

[inlägget ändrat 2006-01-06 20:35:53 av Sasja]

Länk till kommentar
Dela på andra webbplatser

Koden var väldigt inkorrekt. Att den fungerar i IE beror på att IE tillåter nästan vad som helst att köra =)

 

Ändra funktionen till:

function letadubblar(knappnamn) {
o1=document.getElementsByName("vba")[0];
v1=o1.options[o1.selectedIndex].value;
o2=document.getElementsByName("hba")[0];
v2=o2.options[o2.selectedIndex].value;
if (v1==v2) knappnamn.selectedIndex=1;
}

 

Länk till kommentar
Dela på andra webbplatser

Rackarns, det blev lite extra kod det... Jag kan ingenting om JavaScript, kör bara på känsla! Så sällan man behöver det... tycker jag.

 

Jag har ett tiotal rullgarindsmenyer som jag tänkt kontrollera med JavaScript om de innehåller likadana värden likt den funktion du skrev just.

 

Hur löser jag detta på smidigast sätt? Poäng given till smidigt svar!

 

Länk till kommentar
Dela på andra webbplatser

Här kommer en funktion för x antal selects (vars namn-attribut du lägger i arrayen arrSel)

 

var arrSel=new Array('vba','hba','cba');

function EnsureUnique(oSel) {
blValueExists=false;
sMyValue=oSel.options[oSel.selectedIndex].value;
for (i=0;i<arrSel.length;i++) {
	o=document.getElementsByName(arrSel[i])[0];
	sCompareValue=o.options[o.selectedIndex].value;
	blValueExists|=(o!=oSel && sMyValue==sCompareValue);
}
if (blValueExists) oSel.selectedIndex=1;
}

 

[inlägget ändrat 2006-01-06 21:04:09 av Anjuna Moon]

Länk till kommentar
Dela på andra webbplatser

Oj, fi *** vad smidigt!!!

 

Skulle jag kunne ge dig fler än en poäng för det inlägget så skulle jag. Tack!!! Hur kommer det sig att du behärskar JavaScript så väl?

 

Länk till kommentar
Dela på andra webbplatser

Hur kommer det sig att du behärskar JavaScript så väl?

Jobbade med webbutveckling i en 7 år sådär innan jag gick över helt till utveckling av windowapplikationer. Hade varit trist om jag inte plockat upp en och annan "skill" under de åren =)

 

Tack för poängen.

 

Länk till kommentar
Dela på andra webbplatser

Själv önskar man att man kunde JavaScript så väl... men man har inte tid att lära sig något bra som man använder så sällan. Men man kan göra mycket häftiga saker med det, har du gjort nå Ajax-grejjer?

 

Edit: För det är väl JavaScript man kör med i Ajax?

[inlägget ändrat 2006-01-06 21:15:01 av Sasja]

Länk till kommentar
Dela på andra webbplatser

har du gjort nå Ajax-grejjer?

Edit: För det är väl JavaScript man kör med i Ajax?

Jo precis, tillsammans med XMLHttpRequest. Nä, det dök aldrig upp några projekt som krävde denna teknik, men den är mycket intressant. Kan tänka mig att leka med den lite för skojs skull.

 

[inlägget ändrat 2006-01-06 21:23:20 av Anjuna Moon]

Länk till kommentar
Dela på andra webbplatser

Mr Andersson
Jobbade med webbutveckling i en 7 år sådär innan jag gick över helt till utveckling av windowapplikationer

 

Intressant. Varför göra en sån omvändning, som jag ser det, går utvecklingen det motsatta hållet, dvs det blir mer och mer webapplikationer och färre "vanliga" program...?

 

Jag själv har gjort så och se tydliga tecken från kunder på att det är så. Något jag missat...?

 

 

 

Länk till kommentar
Dela på andra webbplatser

Nja, vi har fortfarande webbutveckling på agendan, men jag själv utvecklar inte på den sidan längre (nästan inget iallafall). Vi jobbar med användarundersökningar och statistisk analys, och under ett samarbete med Temo upptäckte vi hur utdaterat deras gamla system var. Resultatet blev ett extensivt projekt som pågick i flera år, där vi utvecklade ett nytt system från grunden åt dem.

 

Numer sitter jag med ett inhouse-projekt för statistisk analys, administration av våra undersökningar och rapportproduktion.

 

Allt går inte att göra med webben =)

 

[inlägget ändrat 2006-01-07 01:13:47 av Anjuna Moon]

Länk till kommentar
Dela på andra webbplatser

Om man nu vill skapa ytterligare en rullgardinsmeny som har endast de alternativ som alla de andra rullgardinsmenyerna har för tillfället. Hur gör man då smidigast?

 

Given poängutdelning till svar som löser meine probleme!

 

Länk till kommentar
Dela på andra webbplatser

Hur menar du? Om menyerna 1-5 har valda värden "a","b","c","d","e" så vill du att den sjätte kombon dynamiskt skall ändras till att bara innehålla dessa alternativ?

 

Länk till kommentar
Dela på andra webbplatser

Ok, ny funktion. Anropa den i slutet av den tidigare funktionen. Den förutsätter att selecten heter "other":

 

function LoadAlternatives() {
oSel=document.getElementsByName('other')[0];
nCnt=oSel.options.length;
for (i=0;i<=nCnt;i++) oSel.options.remove(0);
for (i=0;i<arrSel.length;i++) {
	o=document.getElementsByName(arrSel[i])[0]
	o=o.options[o.selectedIndex];
	oSel.options.add(new Option(o.text,o.value));
}
}

 

Länk till kommentar
Dela på andra webbplatser

Hur ska jag göra nu?

 

Jag stoppar in LoadAlternatives(); sist i funktionen EnsureUnique. Stoppar in en rullgardin typ:

<select name="other"></select>

 

Samt stoppar in LoadAlternatives()-koden förståss... det fungerar inte, vad har jag bommat?

 

 

 

Länk till kommentar
Dela på andra webbplatser

My bad. Tredje raden skall vara

for (i=0;i<=nCnt;i++) oSel.remove(0);

 

Hoppas det funkar nu, för nu ska jag ut på en liten ölrunda. Kollar av tråden imorgon.

 

Länk till kommentar
Dela på andra webbplatser

Fungerara alldeles utmärkt! Däremot vill jag att scriptet ska köras direkt när sidan laddas. Man brukar väl då stoppa ett unLoad-attribut i body-taggen? Nu är det så illa att jag inte kan göra det då body-taggen ligger i en include-fil som är generell för samtliga sidor. Kan det lösas på något annat sätt?

 

Länk till kommentar
Dela på andra webbplatser

Kan det lösas på något annat sätt?

Tja, du kan ju lägga in ett anrop till funktionen längst ned på sidan, precis innan </html>

 

 

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...