2016-06-17 3 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

私はスイッチがそれを行うための最良の方法ではないと思います。私はJavaScriptを忘れて、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> 
関連する問題