2013-07-08 1 views
0

J'essaie de calculer la taxe sur les articles utilisant jQuery. Le CRM que j'utilise a quelque chose appelé tags qui prennent la forme de {tag_something} pour lire dynamiquement des informations sur la page Web. Je veux mettre à jour le prix d'un produit en utilisant jQuery. (plus tard à être mis en œuvre pour l'impôt spécifique de l'Etat). Le code que j'ai est en train de changer le prix d'origine, mais au lieu de le changer à ce qu'il doit être, il a par défaut la valeur "0" sur la page. Toute idée ou suggestion serait grandement appréciée. Le produit que je l'ai mis en place pour cela est: http://www.bemidjisportsonline.com/accessories/backpacks/klim-nac-pakjQuery: Nombre ne pas mettre à jour, en changeant à 0

<!-- taxable items --> 
jQuery(document).ready(function() { 
    initUpdateTax(); 
} 
); 
function initUpdateTax() { 
var taxable = '{tag_taxcode}'; 
var saleprice = '{tag_saleprice}'; 
if (taxable == "Accessories"){ 
    $('#taxable').text(function(saleprice) { 
     return Math.round(parseInt(saleprice + (saleprice * 0.06875)); 
    }); 
} 
} 
+0

Maintenant, il n'est pas en train de changer le numéro du tout. Je sais que c'est cibler le bon élément. Je ne sais pas pourquoi le numéro ne se met pas à jour correctement. – Phorden

+0

Veuillez poster le code HTML approprié. – Rafael

Répondre

0

appel à nouveau la méthode en cas change de la zone de texte ..

$('.productTextInput').on('change', function() { 
    initUpdateTax(); 
}); 

Vous semblez appeler la méthode que lorsque la page se charge pour la première fois. Vous devez appeler à chaque fois que la zone de saisie change ..

Mieux

jQuery(document).ready(function() { 
    // Change event 
    $('.productTextInput').on('change', initUpdateTax) 
     .change(); // Trigger the change on DOM ready 
}); 

function initUpdateTax() { 
    var saleprice = '{tag_saleprice}'; 
    // Find the corresponding element wherein the 
    // total price has to be shown 
    var $total = $(this).closest('li') 
     .prevAll('.price').first().find('strong'); 

    $total.text(function (saleprice) { 
     return Math.round(parseInt(saleprice + (saleprice * 0.06875))); 
    }); 

} 
0

En suivant le lien que vous avez publié, le code qui est en cours d'exécution est:

function initUpdateTax() { 
    var taxable = 'Accessories'; 
    var saleprice = '$95.99'; 
    if (taxable == "Accessories"){ 
     $('#taxable').text(function(saleprice) { 
      return Math.round(parseInt(saleprice + (saleprice * 0.06875)); 
     }); 
    } 
    else { 
    } 
} 

La valeur salesprice n'est pas un nombre valide, donc la multiplication saleprice * 0.06875 donne NaN. Il y a également des parenthèses manquantes dans la ligne avec l'expression return.

En outre, l'utilisation de parseInt et Math.round opérations n'a pas beaucoup de sens, puisque la valeur de retour de la première est un entier qui, lorsqu'il est arrondi est lui-même. L'application de la taxe sur la valeur peut être exprimée dans le plus succint suivant (et IMHO effacer) manière saleprice * 1.06875.

Ceci est une version de la fonction qui fait ce que vous attendez:

function initUpdateTax() { 
    var taxable = '{tag_taxcode}'; 
    if (taxable == "Accessories"){ 
     var saleprice = $('#taxable').text(); 
     var price = parseFloat(saleprice.replace('$', '')) * 1.06875; 
     $('#taxable').text('$' + price.toFixed(2)); 
    } 
    else { 
    } 
} 
Questions connexes