<h4>Konvertera längder</h4>
<style type="text/css">
.convert { font-family: Arial; font-size:12px; border: solid gray 1px; }
#convert_ab { border: dotted gray 1px; text-align:center; }
#convert_a { }
#convert_b { }
</style>
<form name="convertform">
<table class="convert"><tr>
<td id="convert_a"><input type="text" name="a" style="width:150px;"><select name="aenhet"></select></td>
<td id="convert_ab">Konvertera<br/><input type="button" value="<<" onclick="convert('b','a');"> <input type="button" value=">>" onclick="convert('a','b');"></td>
<td id="convert_b"><input type="text" name="b" style="width:150px;"><select name="benhet"></select></td>
</tr></table>
</form>
<script type="text/javascript">
/* Referera obj till document.convertform. Från och med nu kan
* obj användas istället för document.convertform */
obj=document.convertform;
/* Deklaration av en array
* Läs först [url=http://www.webforum.nu/showthread.php?s=&postid=856744#post856744]detta[/url] om arrayer.
* Detta är en deklaration av en array som är likvärdigt med:
* var lengths = [];
* lengths["meter"] = 1;
* lengths["kilometer"] = 1000;
* lengths["mil"] = 1000000;
* osv...
* lengths innehåller längdfaktorer som används för att
* konvertera mellan dem.
*/
var lengths={
meter:1,
kilometer:1000,
mil:1000000,
fot:0.3048,
tum:0.0254,
millimeter:0.001,
mikrometer:0.000001,
mile:1609,
yard:0.9144
}
// Skapa en ny array
var a=new Array();
// Gå igenom varje element n i lengths
for(var n in lengths){
/* Metoden a[a.length]= vadsomhelst;
* .length har här ingenting att gör med lengths utan .length visar
* bara längden på en array
* används för att lägga till et element i slutet av en array.
* Här läggs namnet på varje enhet till a */
a[a.length]=n
}
// Sortera a och gå igenom varje element.
for(var n in a.sort()){
// Lägg till element i de båda optionlistorna.
obj.aenhet[obj.aenhet.length]=new Option(a[n],a[n]);
obj.benhet[obj.benhet.length]=new Option(a[n],a[n]);
// Se till att markera meter som default i optionlistan.
if(a[n]=='meter'){
obj.aenhet.selectedIndex=obj.benhet.selectedIndex=n;
}
}
/* Konvertera mätetalet i den inputbox vars namn finns i
* variabel a till enheten i dropdownlistan vars namn finns
* i variabel b */
function convert(a,b){
/* Kolla värdet i inputbox a evalueras till NaN (Not a number)
* Gör det det så är det inget nummer. */
if(isNaN(parseFloat(obj[a].value))){
// Gör det det, så lämna rutinen.
return;
}
// Sätt inputbox b till...
obj[b].value=
// talet i a gånger...
parseFloat(obj[a].value)*
// faktorn för längden i...
lengths[
// dropdownen med namn i variablen a...
obj[a+'enhet']
// och det valda elementet, som fås med hjälp av index...
[obj[a+'enhet'].selectedIndex].value]/
// Och dela med faktrn för destinationsenheten.
lengths[obj[b+'enhet'][obj[b+'enhet'].selectedIndex].value];
}
</script>
Så förväntar jag mig ett tack och ett accepterat svar! :e
/* Referera obj till document.convertform. Från och med nu kan
* obj användas istället för document.convertform */
obj=document.convertform;
/* Deklaration av en array
* Läs först detta om arrayer.
* Detta är en deklaration av en array som är likvärdigt med:
* var lengths = [];
* lengths["meter"] = 1;
* lengths["kilometer"] = 1000;
* lengths["mil"] = 1000000;
* osv...
* lengths innehåller längdfaktorer som används för att
* konvertera mellan dem.
*/
var lengths={
meter:1,
kilometer:1000,
mil:1000000,
fot:0.3048,
tum:0.0254,
millimeter:0.001,
mikrometer:0.000001,
mile:1609,
yard:0.9144
}
Även om det i praktiken inte spelar så stor roll, så är lengths inte en array utan ett objekt a typen Object. Man kan därför t ex inte använda array-metoder på lengths.
Jämför
var o = {}; // var o = new Object();
o.push("abc");
med
var o = []; // var o = new Array();
o.push("abc");
Eftersom push() är en metod till Array, inte Object, blir det första exemplet fel.
Tänkte jag faktiskt inte på...
Lustigt, när jag skrev förklaringen ovan, så funderade jag faktiskt på hur jag skulle skriva en egen stack-rutin, eftersom jag inte visste att man kunde kunde push'a och pop'a på en Array. Stort tack dectgap!
Fördelar: Fler storheter än längd är inlagt. Nackdelar: Eftersom både in och ut-enhet anges i samma lista blir det extremt många val (^2) för varje ny enhet du vill konvertera mellan.
Det första formuläret skall heta "form" (istället för "1") och listan skall heta "unit" (istället för "select").
Har du 2 enheter blir det 2 val:
a->b
b->a
Har du 3 enheter blir det 6 val:
a->b
a->c
b->a
b->c
c->a
c->b
Har du 4 enheter blir det 12 val:
a->b
a->c
a->d
b->a
b->c
d->d
c->a
c->b
c->d
d->a
d->b
d->c
Har du 10 enheter blir det 90 val i din dropdownlista om du skall kunna konvertera mellan alla.
259 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849