2010-06-07 5 views
1

Tous,Jquery - Boucle à travers les cases à cocher et éléments multiples

j'ai un ensemble d'éléments comme celui-ci sous une forme:

<input type="checkbox" name="chk[140]"> 
<input type="hidden" value="3" name="ctcount[140]"> 
<input type="hidden" value="Apples" name="catname[140]"> 

<input type="checkbox" name="chk[142]"> 
<input type="hidden" value="20" name="ctcount[142]"> 
<input type="hidden" value="Bananas" name="catname[142]"> 

<input type="checkbox" name="chk[144]"> 
<input type="hidden" value="200" name="ctcount[144]"> 
<input type="hidden" value="Strawberries" name="catname[144]"> 

<input type="checkbox" name="chk[145]"> 
<input type="hidden" value="0" name="ctcount[145]"> 
<input type="hidden" value="Carrots" name="catname[145]"> 

Lorsqu'un utilisateur clique sur un bouton, je veux le Javascript pour:

1. Loop through all the checkboxes 
2. For all the checked checkboxes, 
    2a. Get ctcount value 
    2b. Get catname value 
    2c. If ctcount value > 50, alert a message saying "Unable to add item 
      as max limit for 'catname' has reached. 
    2d. Break the loop after it encountered first ctcount value that is 
     greater than 50. 

Je suis nouveau à JQuery..have le code suivant à ce jour:

var checklimit = 50; $ ('# frmTest input: case à cocher: cochée'). Each (fonction (i) { alerte (this.value); });

Comment faire cela en utilisant JQuery?

Merci

+0

qu'avez-vous essayé jusqu'à présent? –

Répondre

1

Try this ... il extrait sur l'ID du nom, utilise alors que pour trouver la valeur et le nom. Demo here.

Script

$(document).ready(function(){ 

    $(':button').click(function(){ 
    var total = 0, done = false; 
    $(':checked').each(function(){ 
     if (!done) {    
     var catid = $(this).attr('name').replace(/chk\[(\d+)\]/,'$1'); // extract # 
     var catval = parseInt($('input[name=ctcount\[' + catid + '\]]').val(), 10); 
     var catnam = $('input[name=catname\[' + catid + '\]]').val(); 
     if (total + catval > 50) { 
      alert('Unable to add item as max limit for "' + catnam + '" has reached'); 
      done = true; 
     } else { 
      total = total + catval; 
     } 
     } 
    }) 
    alert('The total is ' + total); 
    }); 

}) 
+0

Cela fonctionne bien .. Sauf que nous n'avons pas besoin de total .. :) – Jake

1
$('.button').click(function() { 
    var sum = 0; 
    var cancel = false; 

    $('input[type="checkbox"]:checked').each(function() { 
      if(cancel) 
       return; 

      var count = parseInt($(this).next().attr('value')); 
      var name = $(this).next().next().attr('value'); 
      sum += count; 

     if(sum > 50) { 
       alert('no way dude'); 
       cancel = true; 
       return; 
      } 
    }); 

    if(!cancel) 
     // sum <= 50 
});​ 
+0

Merci .. Ne pouvons-nous pas utiliser le nom de l'élément au lieu de $ (this) .next()? Cela va probablement se casser si l'ordre des éléments a changé dans le HTML. – Jake

+0

$ (this) fonctionnera. next() va se casser si vous commencez à faire bouger les choses. Afin de ne pas utiliser next(), vous devez sous-utiliser ou capturer le numéro de champ du nom de la case à cocher et l'utiliser pour construire les noms de champs cachés. –

Questions connexes