2013-04-23 25 views
0

我想在底层做一些Jquery的最佳方式。查询多个每个语句保持可变在一个水平

HTML

<div class="questionblock" id="questionblock1" data-load="questionblock2"> 
        <div class="row inline"> 
         <div class="labelholder"> 
          <strong>Q:</strong> 
          <label>Question 1</label> 
         </div> 
         <div class="inputholder"> 
          <strong>A:</strong> 
          <select data-val="question1"> 
           <option data-value="default">Please select</option> 
           <option>Answer 1</option> 
           <option>Answer 2</option> 
          </select> 
         </div> 
        </div> 
       </div> 
       <div class="questionblock" id="questionblock2" data-load="questionblock3"> 
        <div class="row inline"> 
         <div class="labelholder"> 
          <strong>Q:</strong> 
          <label>Question 2</label> 
         </div> 
         <div class="inputholder"> 
          <strong>A:</strong> 
          <select data-val="question1"> 
           <option data-value="default">Please select</option> 
           <option>Answer 1</option> 
           <option>Answer 2</option> 
          </select> 
         </div> 
        </div> 
        <div class="row inline"> 
         <div class="labelholder"> 
          <strong>Q:</strong> 
          <label>Question 3</label> 
         </div> 
         <div class="inputholder"> 
          <strong>A:</strong> 
          <select data-val="question2"> 
           <option data-value="default">Please select</option> 
           <option>Answer 1</option> 
           <option>Answer 2</option> 
          </select> 
         </div> 
        </div> 
       </div> 

JS

<script type="text/javascript"> 
      $(function() { 
       $('#content').removeClass('nojs'); 
       $('.questionblock').not('#questionblock1').hide(); 
       $('.questionblock').each(function() { 
        var myQuestions = []; 
        var block = $(this).attr('id'); 
        var load = $(this).data('load');    
        $(this).children().children().children('select').each(function() { 
         var questions = $(this).data('val'); 
        }); 
        console.log(block, questions); 
       }); 
      }); 
     </script> 

我希望能够得到一类questionblock的每个格,读取ID,然后得到这个div内的所有选择框,并输出他们的数据-val,这样我就可以在一个层次上验证它。

http://jsfiddle.net/VEtx8/

感谢

理查德

回答

0
 var questions; 
     function getQuestions() { 
      questions = []; 
      $('.questionblock').each(function() { 
       var block = $(this).attr('id'); 
       var load = $(this).data('load'); // Not used?  
       $(this).find('select').each(function() { 
        questions.push($(this).data('val')); 
       }); 
       console.log(block, questions); 
      }); 
     } 
     $(function() { 
      getQuestions(); 
      $(".questionblock select").change(getQuestions); 
     }); 
+0

真棒非常感谢:) – user989952 2013-04-23 03:23:26

+0

有过2级采用推的方式吗? http://jsfiddle.net/VEtx8/1/或者有没有更好的方法来做到这一点?我需要在选择被更改后更新数组 – user989952 2013-04-23 04:51:52

+0

您可以通过在'$(function()...)之外声明'questions'成为一个全局变量。然后你可以在'.change()'处理程序中重置它。 – Barmar 2013-04-23 04:57:32