0

没有错误但不起作用:我需要在健身房设置四项运动选择,所以我必须使用四个下拉菜单,我要从数据库中检索数据列表,它是一个数组 drom 数据库,当我选择时包含 30 个学科第一个下拉列表中的第一个下拉列表第二个下拉列表不得包含此值,并且当我从第三个下拉列表中选择一个值时,此下拉列表不得包含下拉列表 1 和下拉列表 2 中的 value1 和 value2,与下拉列表四相同必须只包含 27

我的观点 :

  <?php $sports = array(
                        'aucun choix'  => ' Aucun choix',
                        'aerobic'  => ' 01- Aerobic',
                        'musculation'    => ' 02- Musculation',
                        'judo'   => ' 03- Judo',
                        'taekwondo' => ' 04- Taekwando',                                              
                        'aikido'  => ' 05- Aikido',
                        'karaté'    => ' 06- Karaté',
                        'haltérophilie'   => ' 07- Haltérophilie',
                        'sport de salle' => ' 08- Sport de salle',                                              
                        'sport feminin'  => ' 09- Sport feminin',
                        'sport plein air'    => ' 10- Sport plein air',
                        'sport de pêche'   => ' 11- Sport de pêche',
                        'basketball' => ' 12- Basketball',
                        'hand-voley ball'  => ' 13- Hand-voley ball',
                        'football'   => ' 14- Football',
                        'pétanque' => ' 15- Pétanque',                                              
                        'natation'  => ' 16- Natation',
                        'jeux d\'echec'    => ' 17- Jeux d\'echec',
                        'golf'   => ' 18- Golf',
                        'cyclisme' => ' 19- Cyclisme',                                              
                        'tenis'  => ' 20- Tenis',
                        'equitation'    => ' 21- Equitation',
                        'chasse tir vole'   => ' 22- Chasse tir vole',
                     ); 
                   ?>

          <script>
          function callSave(select) {
              var parent = select.parentNode;    
              var usedValues = {};    
              for (var i = 0; i < parent.children.length; ++i) {
                  var s = parent.children[i];
                  if (s.nodeName.toLowerCase() != 'select') {
                      continue;
                  }        
                  if (s.value != '') {
                      usedValues[ s.value ] = s;
                  }
              }    

              for (var i = 0; i < parent.children.length; ++i) {
                 var s = parent.children[i];
                 if (s.nodeName.toLowerCase() != 'select') {
                      continue;
                 }        
                  for (var j = 0; j < s.children.length; ++j) {
                     var o = s.children[j];
                      if (o.nodeName.toLowerCase() != 'option') {
                          continue;
                      }            
                      var p = o.value == '' ? undefined : usedValues[o.value];            
                     if (p == undefined || p == s) {
                          o.style.display = '';
                      }          
                      else {
                          o.style.display = 'none';
                      }
                  }
              }
          }
          </script>

         <div <?php if(form_error('sport_ordre1')) { echo 'class="control-group error"'; } else {echo 'class="control-group"';} ?> >
            <label class="control-label">Sport ordre 1 :</label>
         <div class="controls">
               <?php echo form_dropdown('sport_ordre1', $sports , $this->input->post('sport_ordre1') ? $this->input->post('sport_ordre1') : $participant_sport->sport_ordre1 , 'onChange="callSave(this)"'); ?>
              <span class="help-inline"><?php echo form_error('sport_ordre1'); ?></span>
         </div>
      </div>

        <div <?php if(form_error('sport_ordre2')) { echo 'class="control-group error"'; } else {echo 'class="control-group"';} ?> >
                 <label class="control-label">Sport ordre 2 :</label>
                   <div class="controls">
                       <?php echo form_dropdown('sport_ordre2', $sports , $this->input->post('sport_ordre2') ? $this->input->post('sport_ordre2') : $participant_sport->sport_ordre2 ,'onChange="callSave(this)"'); ?>
                        <span class="help-inline"><?php echo form_error('sport_ordre2'); ?></span>
                      </div>
          </div>

           <div <?php if(form_error('sport_ordre3')) { echo 'class="control-group error"'; } else {echo 'class="control-group"';} ?> >
                 <label class="control-label">Sport ordre 3 :</label>
                      <div class="controls">
                           <?php echo form_dropdown('sport_ordre3', $sports , $this->input->post('sport_ordre3') ? $this->input->post('sport_ordre3') : $participant_sport->sport_ordre3 , 'onChange="callSave(this)"'); ?>
                          <span class="help-inline"><?php echo form_error('sport_ordre3'); ?></span>
                        </div>
                  </div>

             <div <?php if(form_error('sport_ordre4')) { echo 'class="control-group error"'; } else {echo 'class="control-group"';} ?> >
                                    <label class="control-label">Sport ordre 4 :</label>
                                    <div class="controls">
                                    <?php echo form_dropdown('sport_ordre4', $sports , $this->input->post('sport_ordre4') ? $this->input->post('sport_ordre4') : $participant_sport->sport_ordre4 , 'onChange="callSave(this)"'); ?>
                                    <span class="help-inline"><?php echo form_error('sport_ordre4'); ?></span>
                                </div>
                            </div>

问题是当我在一个下拉列表中选择一个值时,它会出现在其他下拉列表中,因此 onChange 方法不适用于这种情况。请问有什么帮助吗?

4

1 回答 1

0

好吧,我认为当你调用 .parentNode 时,你应该通过它的 id 访问 DOM。由于您没有通过 id 访问它,因此您只需将 DOM 元素传递给函数。

'onChange="callSave(this.id)"';

但你实际上需要什么。你可以使用jquery。

于 2013-07-09T12:33:29.740 回答