使用onChange的codeigniter form_dropdown不起作用

时间:2013-07-09 12:10:39

标签: php javascript codeigniter

没有错误但没有工作: 我需要在健身房设置一个四阶运动选项,所以我必须使用四个下拉菜单,我从数据库中检索数据列表,它是一个数据drom数据库,当我在第一个选择fisrt时包含30个学科下拉seconde下拉不包含这个值,而且当我从第3个下拉列表中选择一个值时,这个下拉列表不会包含来自dropdown1和dropdown2的value1和value2,同样关于下拉列表4它必须只包含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方法对于这种情况不起作用。有什么帮助吗?

1 个答案:

答案 0 :(得分:0)

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

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

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