2010-02-15 3 views
2

J'ai un petit calcul de prix javascript qui ne fonctionne pas sur le PC d'un ami, mais cela fonctionne très bien sur mon Mac. Je suppose que c'est un point-virgule ou quelque chose de petit qui n'est pas au bon endroit? S'il vous plait aidez si vous le pouvez?! La page entière peut être trouvée @http://procollage.com/pricing/photo-collage-pricing.html. Merci à tous, encore une fois, à l'avance.Calculez Javascript ne fonctionne pas sur PC, mais fonctionne sur Mac. Quelqu'un peut-il signaler l'erreur?

Voici le script.

<script LANGUAGE="JavaScript"> 
<!-- 

function calculate(PricingForm) 
{ 
    height = eval(PricingForm.height.value); 
    width = eval(PricingForm.width.value); 
    photos = eval(PricingForm.photos.value); 
    lgtext = eval(PricingForm.lgtext.value); 
    mountlam = eval(PricingForm.mount.value); 
    mountlam = eval(PricingForm.lam.value); 

    GetPriceOne (PricingForm, height, width, photos, lgtext, mount, lam); 
} 

function GetPriceOne(PricingForm, height, width, photos, lgtext, mount, lam) 
{ 
    PriceOne = height * width; 
    GetPriceTwo(PricingForm, height, width, photos, lgtext, mount, lam, PriceOne); 
} 

function GetPriceTwo(PricingForm, height, width, photos, lgtext, mount, lam, PriceOne) 
{ 
    PriceTwo = PriceOne/144; 
    GetPriceThree(PricingForm, height, width, photos, lgtext, mount, lam, PriceTwo); 
} 

function GetPriceThree(PricingForm, height, width, photos, lgtext, mount, lam, PriceTwo) 
{ 
    PriceThree = PriceTwo * 15; 
    GetPriceFour(PricingForm, height, width, photos, lgtext, mount, lam, PriceThree); 
} 

function GetPriceFour(PricingForm, height, width, photos, lgtext, mount, lam, PriceThree) 
{ 
    if(PricingForm.lgtext.checked) 
    { 
     PriceFour = PriceThree + 20; 
     GetPriceFive(PricingForm, height, width, photos, lgtext, mount, lam, PriceFour); 
    } 
    else 
    { 
     PriceFour = PriceThree; 
     GetPriceFive(PricingForm, height, width, photos, lgtext, mount, lam, PriceFour); 
    } 
} 

function GetPriceFive(PricingForm, height, width, photos, lgtext, mount, lam, PriceFour) 
{ 
    if(PricingForm.mount.checked) 
    { 
     PriceFive = PriceFour + PriceTwo * 5; 
     GetPriceSix(PricingForm, height, width, photos, lgtext, mount, lam, PriceFive); 
    } 
    else 
    { 
     PriceFive = PriceFour; 
     GetPriceSix(PricingForm, height, width, photos, lgtext, mount, lam, PriceFive); 
    } 
} 

function GetPriceSix(PricingForm, height, width, photos, lgtext, mount, lam, PriceFive) 
{ 
    if(PricingForm.lam.checked) 
    { 
     PriceSix = PriceFive + PriceTwo * 5; 
     GetPriceSeven(PricingForm, height, width, photos, lgtext, mount, lam, PriceSix); 
    } 
    else 
    { 
     PriceSix = PriceFive; 
     GetPriceSeven(PricingForm, height, width, photos, lgtext, mount, lam, PriceSix); 
    } 
} 

function GetPriceSeven(PricingForm, height, width, photos, lgtext, mount, lam, PriceSix) 
{ 
    total = (photos * 4.95) + PriceSix; 
    WriteDocument(total); 
} 

function RoundToPennies(n) 
{ 
    pennies = n * 100; 
    pennies = Math.round(pennies); 
    strPennies = "" + pennies; 
    len = strPennies.length; 
    return strPennies.substring(0, len - 2) + "." + strPennies.substring(len - 2, len); 
} 

function WriteDocument(total) { 
    document.PricingForm.collageEstimate.value = "$" + RoundToPennies(total); 
} 

//--> 
</script> 
+0

Et votre ami utilise quel navigateur? – Gumbo

+0

Veuillez décrire les navigateurs utilisés. Ce n'est pas le système d'exploitation, ce sont les navigateurs. –

+0

peut-être qu'il est lié au séparateur décimal et la localisation du navigateur de votre ami ... –

Répondre

1

YUCK! Pourquoi diable êtes-vous en train de basculer à travers plusieurs fonctions?

GetPriceFive() appelle PriceTwo qui n'existe pas à ce stade. Ce que vous essayez de faire, c'est une bâtardisation complète de la programmation. Voici un nouveau départ pour vous:

function calculate(PricingForm) { 
    height = PricingForm.height.value; 
    width = PricingForm.width.value; 
    photos = PricingForm.photos.value; 
    lgtext = PricingForm.lgtext.value; 
    mountlam = PricingForm.mount.value; 
    mountlam = PricingForm.lam.value; 

    price = GetPrice(PricingForm, height, width, photos, lgtext, mount, lam) 
    document.PricingForm.collageEstimate.value = "$" + RoundToPennies(price); 
} 

function GetPrice(PricingForm, height, width, photos, lgtext, mount, lam) { 

     price = height * width; 
     price = price/144; 
     pricetwo = price; // for lookup later 
     price = price * 15; 

     price = price + (PricingForm.lgtext.checked) ? 20 : 0; 
     price = (PricingForm.mount.checked) ? price + pricetwo * 5 : price; 
     price = (PricingForm.lam.checked) ? price + pricetwo * 5 : price; 

     return (photos * 4.95) + price; 
} 

function RoundToPennies(n) { 
    pennies = n * 100; 
    pennies = Math.round(pennies); 
    strPennies = "" + pennies; 
    len = strPennies.length; 
    return strPennies.substring(0, len - 2) + "." + strPennies.substring(len - 2, len); 
} 

Cela devrait faire ce que votre ancien code fait (peut-être avec quelques oublis), sans que tous les Guff ... Et vous avez une référence durable au deuxième prix.

J'ai jeté la fonction d'écriture car elle n'était pas nécessaire. Les fonctions qui occupent une ligne et ne sont appelées qu'une seule fois n'ont pas besoin d'être des fonctions.

+0

Merci beaucoup. Je suis un débutant complet à Javascripting et je sais que c'est très apparent. Votre conseil est très apprécié.Je vais essayer de le retravailler avec ce que vous avez suggéré. Je suis sûr que j'aurai d'autres questions, mais je reviendrai. Merci encore. –

+0

Après l'avoir regardé, je vois clairement ce que vous faites et c'est IMPOSANT. Tout est condensé en 1 fonction. Je ne peux pas le faire fonctionner parce que je ne sais pas assez ... –

+0

Un nouveau départ ne continuerait pas à utiliser globals ou eval. – Quentin

1

Il semble que vous deviez lire avant d'essayer de résoudre ce problème. JavaScript vous laissera creuser une tombe assez profonde si vous ne faites pas attention.

Douglas Crockford a d'excellentes vidéos sur JavaScript.

http://video.yahoo.com/watch/111593/1710507

Il a aussi écrit un livre fantastique sur le sujet aussi bien.

http://oreilly.com/catalog/9780596517748

Celles-ci devraient vous aider à bien sur votre chemin pour comprendre les pics et les pièges de JavaScript. Bonne chance!

0

en utilisant Firefox sur Windows, le script explose à un moment donné au cours de cette:

height = eval(PricingForm.height.value); 

il ressemble à l'un des scripts/bibliothèques cette page chargement a réquisitionné la fonction eval. le script descend sur une ligne donc ce n'est pas facile de déboguer. de toute façon, passer à travers le script ne le fait pas à la ligne suivante.

et juste un pointeur général, je crois que

var someUsefulName = document.getElementById('height'); 
var somethingElse = NoIdeaWhatThisMethodDoes(someUsefulName.value); 

est préféré à la façon dont vous accédez à des entrées sur la page.

edit: pourquoi l'appel à eval() est là? si c'est pour prendre la valeur et en dériver quelque chose, remplacez eval() par une méthode appropriée. Si vous voulez juste une copie de ce qui est dans l'entrée, supprimez les appels à eval().

Questions connexes