"Uncaught TypeError: Cannot use 'in' operator to search for 'length' in" when getting checked values by data attribute

时间:2017-05-16 09:29:51

标签: javascript arrays checkbox checkboxlist

This is the view of checkbox group enter image description here

And this is my html code for the above view(there is more check boxes, only 2 mention here):

    <div class="panel-body subject_names">
   <div class="col-md-12">
      <label for="checkboxes-0" class="col-md-7">
      KE1-Financial Accounting &amp; Reporting Fundamen
      </label>
      <input type="checkbox" data-subject-name="KE1-Financial Accounting &amp; Reporting Fundamen" data-subject-ai="925" class="big-checkbox col-md-1 subject1" name="exam_subjects" id="checkboxes-0" value="1012"> 
      <div class="col-md-4 pull-left">
         <input id="training_institute" name="textinput" type="text" placeholder="" class="input-md">
      </div>
   </div>

   <div class="col-md-12">
      <label for="checkboxes-0" class="col-md-7">
      KE2-Management Accounting Information
      </label>
      <input type="checkbox" data-subject-name="KE2-Management Accounting Information" data-subject-ai="926" class="big-checkbox col-md-1 subject1" name="exam_subjects" id="checkboxes-0" value="1013"> 
      <div class="col-md-4 pull-left">
         <input id="training_institute" name="textinput" type="text" placeholder="" class="input-md">
      </div>
   </div>


</div>

and this is my js code :

var subjects_names = [];
$.each($("input[name='exam_subjects']:checked").attr("data-subject-name"), function() {
    subjects_names.push($(this).val());
});

Exception:

Exam_application_c:775 Uncaught TypeError: Cannot use 'in' operator to search for 'length' in KE1-Financial Accounting & Reporting Fundamen

1 个答案:

答案 0 :(得分:3)

You're using $.each on a string, it needs to be an object or an array.

Try changing your code to this

var subjects_names = [];
$.each($("input[name='exam_subjects']:checked"), function () {
    subjects_names.push($(this).data("subjectName"));
});

Or better yet use .each as your iterating over a jQuery object

var subjects_names = [];
$("input[name='exam_subjects']:checked").each(function () {
    subjects_names.push($(this).data("subjectName"));
});