2016-06-17 6 views
0

Mit einem Schalter in PHP, ich möchte die Optionen einer Combobox auf der Grundlage der Wert aus der Datenbank vorgewählt werden. Ich habe dies durch eine PHP-switch-Anweisung gesagt, zu tun, und hier ist das, was ich habe:Ist es unmöglich Optionen einer Combobox mit PHP zu verstecken?

<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> 

Das ist die Combo war, und hier ist der Schalter:

   <?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; 

       } 
       ?> 

Aber das funktioniert nicht . Warum? Es ist unmöglich? Ich habe das jetzt schon seit drei Tagen versucht. Hat jemand eine Idee?

+5

wo/Wie läuft dieser JS? Wenn Sie es VOR dem eigentlichen Formularelement in die Seite einfügen, findet die js nichts, da dieser Teil der Seite noch nicht analysiert wurde. –

+2

oh Gott, danke so so sehr, du hast keine Ahnung, wie dankbar ich bin, danke – RazorFinger

+0

hast du schon 'cbostatus' zugewiesen? (mit 'document.getElementById' f.e.) – Jeff

Antwort

2

Ich glaube nicht, dass der Schalter der beste Weg ist, um es zu tun, und ich würde auf das JavaScript verzichten und alles mit PHP machen. Auf diese Weise müssen Sie sich keine Gedanken über versteckte Optionen machen, denn nur die, die Sie brauchen, sind da. Mein Vorschlag ist, diese stattdessen:

definieren eine Reihe von numerischen Werten und sichtbaren Optionen für jeden Status:

$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']], 
]; 

Dann Ausgabe Ihre Auswahl von Optionen auf der Grundlage der Aufgabenstatus wie folgt aus:

<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>