2016-06-17 1 views
0

PHP에서 스위치를 사용하여 데이터베이스에서 미리 선택한 값에 따라 콤보 상자의 옵션을 숨기려고합니다. 나는 PHP는 switch 문을 통해 이렇게 말하고, 여기에 내가 가진 무엇을 봤는데 : 여기에 콤보, 그리고 PHP로 콤보 박스의 옵션을 숨길 수 있습니까?

<tr> 
       <td> 
       <select name="cbostatus" id="cbostatus"> 
       <option selected "" ></option> 
       <option value="1" <?php if ($row['task_status']=='Planned') echo 'selected="selected"';?>>Planned</option> 
       <option value="2" <?php if ($row['task_status']=='Started') echo 'selected="selected"';?>>Started</option> 
       <option value="3" <?php if ($row['task_status']=='Available') echo 'selected="selected"';?>>Available</option> 
       <option value="4" <?php if ($row['task_status']=='Impeded') echo 'selected="selected"';?>>Impeded</option> 
       <option value="5" <?php if ($row['task_status']=='Concluded') echo 'selected="selected"';?>>Finished</option> 
       </select> 
       </td> 
       </tr> 

스위치입니다 :

   <?php 
       switch ($row['task_status']) 
       {    
        case 'Planned': 
         echo ' 
          <script> 
            cbostatus.options[4].style.display = "none"; 
            cbostatus.options[5].style.display = "none"; 
            cbostatus.options[3].style.display = "none"; 
          </script> 
         '; 
         break; 

        case 'Available': 
         echo ' 
          <script> 
            cbostatus.options[1].style.display = "none"; 
            cbostatus.options[4].style.display = "none"; 
            cbostatus.options[5].style.display = "none"; 
          </script> 
         '; 
         break; 

        case 'Started': 
         echo ' 
          <script> 
            cbostatus.options[1].style.display = "none"; 
          </script> 
         '; 
         break; 

        case 'Impeded': 
         echo ' 
          <script> 
            cbostatus.options[1].style.display = "none"; 
          </script> 
         '; 
         break; 

        case 'Concluded': 
         echo ' 
          <script> 
            cbostatus.options[1].style.display = "none"; 
          </script> 
         '; 
         break; 

       } 
       ?> 

하지만 그건 작동하지 않습니다 . 왜? 불가능한가요? 나는 지금 3 일 동안 이것을하려고 노력해왔다. 누구 한테 아이디어있어?

+5

/이 JS는 어떻게 운영되고 있습니까? 실제 폼 요소 전에 페이지에 넣으면 js는 페이지의 해당 부분이 아직 파싱되지 않았기 때문에 아무 것도 찾지 못합니다. –

+2

오 하나님, 고마워요. 너무 감사합니다. 감사합니다. 감사합니다. – RazorFinger

+0

전에 'cbostatus'를 지정 했습니까? ('document.getElementById' f.e.) – Jeff

답변

2

나는 스위치가 그것을하는 가장 좋은 방법이라고 생각하지 않는다. 나는 자바 스크립트를 버리고 PHP로 모든 것을 할 것이다. 이 방법을 사용하면 옵션을 숨기는 것에 대해 걱정할 필요가 없습니다. 필요한 옵션 만 있으면 시작할 수 있기 때문입니다. 나의 제안이 대신이다 :

각 상태에 대한 숫자 값 눈에 보이는 옵션의 배열을 정의 :이 같은 작업 상태에 따라

$status = [ 
    'Planned' => ['val' => 1, 'options' => ['Planned','Started']], 
    'Started' => ['val' => 2, 'options' => ['Started','Available','Impeded','Concluded']], 
    'Available' => ['val' => 3, 'options' => ['Started','Available']], 
    'Impeded' => ['val' => 4, 'options' => ['Started','Available','Impeded','Concluded']], 
    'Concluded' => ['val' => 5, 'options' => ['Started','Available','Impeded','Concluded']], 
]; 

그리고 출력 할 옵션을 선택합니다 :

<tr> 
    <td> 
     <select name="cbostatus" id="cbostatus"> 
     <option selected "" ></option> 
     <?php foreach ($status[$row['task_status']]['options'] as $option) { 
      $selected = $row['task_status'] == $option ? 'selected="selected"' : ''; 
      echo '<option value="'. $status[$option]['val'] .'">'. $option .'</option>'; 
     } ?> 
     </select> 
    </td> 
</tr> 
관련 문제