2012-12-19 6 views
1
function removeTds() { 
    var elements = $('#goldBarList tr:not(:eq(0))').filter(':has(:checkbox:checked):lt(50)'); 
    var count = elements.length; 
    elements.each(function() { 
     grossWeightTotal = grossWeightTotal - $('#goldBarList tr:eq(' + $(this).index() + ') td:eq(8)').text(); 
     netWeightTotal = netWeightTotal - $('#goldBarList tr:eq(' + $(this).index() + ') td:eq(9)').text(); 
     fineOunceTotal = fineOunceTotal - $('#goldBarList tr:eq(' + $(this).index() + ') td:eq(10)').text(); 
    }); 
    elements.remove(); 
    if(count === 50) window.setTimeout(removeTds, 1); 
} 
removeTds(); 

Le code ci-dessus aboutit à "arrêter l'exécution de ce script?" rapide. J'ai 4000 enregistrements.Comment améliorer les performances ..?

Répondre

8

Votre code est intrinsèquement lent et optimisable (cache $(this).index() par exemple) mais le plus gros problème est que vous demandiez au navigateur d'exécuter la fonction toutes les 1 ms si vous avez 50 * N enregistrements (par exemple 4000 ...).

Nettoyez tout simplement en une fois.

Par exemple:

function removeTds() { 
    var elements = $('#goldBarList tr:not(:eq(0))').filter(':has(:checkbox:checked)'); 
    elements.each(function() { 
     var index = $(this).index(); 
     grossWeightTotal = grossWeightTotal - $('#goldBarList tr:eq(' + index + ') td:eq(8)').text(); 
     netWeightTotal = netWeightTotal - $('#goldBarList tr:eq(' + index + ') td:eq(9)').text(); 
     fineOunceTotal = fineOunceTotal - $('#goldBarList tr:eq(' + index + ') td:eq(10)').text(); 
    }); 
    elements.remove(); 
} 
removeTds(); 

Si vous voulez avoir le nettoyage été refaits lorsque la case sont changées, ajoutez:

$('input[type="checkbox"]').change(removeTds); 

Bien sûr, vous pouvez également se lier à un bouton:

$('#removeButton').change(removeTds); 
+0

En fait, c'est quand un utilisateur clique sur le bouton de suppression, je dois supprimer toutes les lignes qui ont coché checkbox et j'ai besoin de t o moins les totaux ... au maximum, je peux avoir 4000 lignes .. – user1912935

+0

Navigateur donnant une alerte pour arrêter l'exécution du script? avec des options oui ou non ... – user1912935

Questions connexes