2010-07-20 7 views
0

Je cherche le meilleur moyen de déclencher (appeler) une fonction qui va additionner tous les champs d'entrée dans toutes les lignes du tableau. Le problème est, que le champ peut être manipulé manuellement (en tapant) ou avec une fonction - valeur écrite à eux (qui ne déclenche pas un événement).Mettre à jour la somme sur le changement de table (tr ajouter, supprimer, focus, taper ...)

Je voudrais que la fonction somme déclencherait sur Ajout/Suppression de ligne (tr), keypress, focusout ...

BTW: Je cloner les lignes de la table, ils sont créés dynamiquement.

Merci!

$(".val_field:input").live("focusout", function(){ 
    val = parseFloat($(this).val()); 
    sum += isNaN(val) ? 0 : val; 
    $("#sum").val(sum); 
}); 
+0

Vous avez dit que vous créez dynamiquement les lignes de la table maintenant. Qu'est-ce qui vous empêche d'appeler votre fonction somme là? –

+0

Votre exemple de code semble ajouter la valeur d'entrée à la somme chaque fois qu'il est modifié, plutôt que de conserver le total réel: -? –

+0

Ouais, je voulais juste savoir s'il y avait une méthode plus élégante que d'appeler la fonction Sum du nombre d'endroits différents (fonctions) ... Ce code était juste un exemple ... code de travail ... c'est ce dont j'avais besoin à le moment. Merci! – Mission

Répondre

0

Cette question est ancienne, mais une réponse peut être utile

function recount(el){ 
    var sum = 0; 
    el.parents('table').find('.val_field:input').each(function(){ 
     var val = parseFloat($(this).val()); 
     sum += isNaN(val) ? 0 : val; 
    }); 
    $("#sum").val(sum); 
} 

$('table').on('keypress blur', '.val_field:input', function(){ 
    recount($(this)); 
}); 

Bien sûr, vous pouvez appliquer recount() trop le retrait de la ligne (c'est pourquoi je décomposées il).

Questions connexes