2011-09-15 3 views
0

J'ai essayé plusieurs façons de trouver toutes les cases cochées mais je ne sais pas pourquoi celle-ci ne fonctionne pas.Trouver toutes les cases à cocher cochées ne fonctionne pas

JavaScript:

var idList = new Array(); 
function getIds() 
{ 
    var loopCounter = 0; 
    // find all the checked checkboxes 
    $('input[name^="check_"]:checked').each 
    { 
     function() 
     { 
      //fill the array with the values 
      idList[loopCounter] = $(this).val(); 
      loopCounter += 1; 
     } 
    }; 
} 
function showArray() 
{ 
    alert(idList); 
} 

et le HTML/ERB:

<% user_project_ids = @users_projects.collect { |up| up.project_id } %> 

<fieldset style="width: 400px;"> 
    <legend>Current Projects</legend> 
    <table> 
     <tr> 
      <th>Project ID</th> 
      <th>Project Name</th> 
     </tr> 
     <% @projects.each do |project| %> 
     <tr> 
      <td><%= project.id %></td> 
      <td><%= project.project_number %></td> 
      <td><%= project.project_name%></td> 
      <td><input name="check_<%= project.id %>" type="checkbox" 
       <%=' checked="yes"' if user_project_ids.include? project.id %>></td> 
     </tr> 
     <% end %> 
    </table> 
</fieldset> 

<div onclick="getIds();"> 
    CLICK 
</div> 

<button onclick="showArray()">Click Again</button> 

Je ne sais pas pourquoi cela ne fonctionne pas, mais peut-être quelqu'un peut voir ce que je ne peux pas.

Répondre

2

Le paramètre à .Chaque doivent être entre parenthèses .each()

function getIds() 
{ 
    var loopCounter = 0; 
    // find all the checked checkboxes 
    $('input[name^="check_"]:checked').each(function() { 
     //fill the array with the values 
     idList[loopCounter] = $(this).val(); 
     loopCounter += 1; 
    }); 
} 
0

L'autre réponse que vous avez déjà parlé de votre problème, mais votre code peut être amélioré. Il n'est pas nécessaire d'utiliser un compteur de boucle, chacun fournissant le numéro d'itération.

function getIds() 
{ 
    //reset idArray 
    idList = []; 
    // find all the checked checkboxes 
    $('input[name^="check_"]:checked').each(function(ind) { 
     idList[ind] = $(this).val(); 
    }); 
} 

Vous ne même pas besoin de l'index lorsque vous avez des méthodes sur le tableau pour ajouter l'élément

function getIds() 
{ 
    //reset idArray 
    idList = []; 
    // find all the checked checkboxes 
    $('input[name^="check_"]:checked').each(function() { 
     idList.push($(this).val()); 
    }); 
} 
+0

merci pour dude conseils, déjà fait quelque chose comme ça dans le temps après que je suis la réponse. – SD1990

Questions connexes