2012-05-15 23 views
2
echo "<td>Language</td>"; 
echo "<td><select id='language' name='language'> 
      <option value=''>Select...</option> 
      <option value='en_US'>English(US)</option> 
      <option value='en_AU'>English(AU)</option> 
      <option value='en_US'>English(UK)</option> 
      </select> 
     </td>"; 

我把那個代碼片斷封裝在一個表單中,當我選擇提交表單時,我可以看到這些選項。然而,在我點擊一個按鈕來保存我所選擇的內容之後,無論什麼時候,上面的語言總是被設置爲第一個選項(en_US)。選項總是落入第一個值,莫名其妙

+0

呃,這是50%的機率......你在四個選項中有兩次'en_US'。 – bfavaretto

回答

3

您需要檢查您上次提交的值以確定哪個選項應該接收selected屬性。您目前沒有這樣做,所以瀏覽器將第一個選項設置爲選定的選項。

// Define all languages 
$l = array('en_US'=>'English(US)','en_AU'=>'English(AU)','en_UK'=>'English(UK)'); 

// Prepare an options variable 
$o = ""; 

// Construct our options list 
foreach ($l as $k => $v) 
    $o .= sprintf("<option value='%s'%s>%s</option>", 
      $k, $k === $_POST["language"] ? " selected" : "", $v); 

// Echo our Select menu 
echo "<select id='language' name='language'>$o</select>"; 

演示:http://codepad.org/PkwNYHbO

+0

這很可愛。謝謝。 – solomon

0
$selected = $_POST["language"]; 

echo "<td><select id='language' name='language'> 
      <option value='' ".($selected==""?"selected":"").">Select...</option> 
      <option value='en_US' ".($selected=="en_US"?"selected":"").">English(US)</option> 
      <option value='en_AU' ".($selected=="en_AU"?"selected":"").">English(AU)</option> 
      <option value='en_US' ".($selected=="en_US"?"selected":"").">English(UK)</option> 
      </select> 
     </td>"; 

我平時做這樣的事情。第一部分獲取發送給服務器的語言的值,然後檢查每個選項是否具有相同的值,然後將「選定」置於具有相同值的元素。

在情況下,($selected=="en_US"?"selected":"")手段,如果當前選定的語言是「EN_US」,「選擇」,將要連接到的標籤,因爲它的屬性,從而使輸出:

<option value='en_US' selected>English(US)</option> 

或者你可以做喬納森的解決方案,它更優雅。

相關問題