2010-06-04 10 views
0

Je dois changer le bouton radio du mode de livraison et d'expédition de l'expéditeur une seule fois via une fonction javascript, pas pour toujours.La fonction javascript n'arrête pas la boucle - Elle se trouve sur un site Web netsuite

Cependant, quand j'utilise cette fonction, qui exécute lorsque le Examiner et la page lorsque la commande est < 5 $, il va dans une boucle sans fin:

function setFreeSampShipping(){ 
var options = document.forms['checkout'].shippingcarrierselect.getElementsByTagName('option'); 
for (i=0;i<options.length;i++){ 
    if (options[i].value == 'nonups'){ 
    document.forms['checkout'].shippingcarrierselect.value='nonups'; 
    document.forms['checkout'].shippingcarrierselect.onchange(); 
    document.location.href='/app/site/backend/setshipmeth.nl?c=659197&n=1&sc=4&sShipMeth=2035'; 
    } 
} 
} 

Il est appelé à partir de cette partie la fonction setSampPolicyElems() que vous pouvez voir que je l'ai fait remarquer à arrêter la boucle:

if (carTotl < 5 && hasSampp == 1) { 
    /* 
    if (document.forms['checkout'].shippingcarrierselect.value =='ups'){ 
     setFreeSampShipping(); 
    } 
    */ 
    document.getElementById('sampAdd').style.display="none"; 
    document.getElementById("custbody_ava_webshiptype").value = "7";//no charge free freight 
    if (document.getElementById("applycoupon")) { 
     document.location.href='/app/site/backend/setpromocode.nl?c=659197&n=1&sc=4&kReferralCode=SAMPLE' 
    } 
    document.write("<div id='msg'><strong>Sample & Shipping:</strong></span> No Charge. (Your sample order is < $5.)</div>"); 
} 

pour voir le problème, passez à l'examen de l'ordre et de soumettre la page ici: https://checkout.netsuite.com/s.nl?c=659197&sc=4&n=1 (ou aller à http://www.avaline.com, appuyez sur "caisse" et connexion)

Vous pouvez vous connecter avec ces identifiants:
Courriel: [email protected]
Pass: test03

Ma solution à ce jour était d'échanger sur la ligne de déclenchement d'événements onchange() avec cela, car je ne suis pas en cours d'exécution document.location.href deux fois: à la place, je passe les deux variables dans une chaîne de requête URL:

var dropdown = document.getElementById('shippingcarrierselect'); 
document.body.style.cursor = 'wait'; 
document.location.href='/app/site/backend/setshipmeth.nl?c=659197&n=1&sc=4&sShipMeth=2035&sShipCarrier='+dropdown.value; 

Répondre

0

C'était ma solution:

var dropdown = document.getElementById('shippingcarrierselect'); document.body.style.cursor = 'wait'; document.location.href='/app/site/backend/setshipmeth.nl?c=659197&n=1&sc=4&sShipMeth=2035&sShipCarrier='+dropdown.value; 
0

Votre variable "i" est globale. En outre, vous devez stocker options.length dans la variable. "i" peut être défini par certains scripts qui provoquent une boucle infinie.

+0

Il est possible que je suppose. Pour une raison quelconque, il a été listé comme une variable globale dans firebug bien que je ne sache pas où cela a été déclaré, et je n'ai pas rencontré de problèmes avant quand j'ai utilisé 'var i' pour les boucles .... Pourquoi stocker les options.length dans une variable? – Lauren