2011-03-15 117 views
0

我有2個下拉菜單,而且我在第一個菜單中選中某個菜單後,使用開關填充第二個菜單。這主要只是一個實驗,因爲之前我做過的jquery事情似乎很慢。如果任何人有更好,更快的方式做到這一點,我都耳熟能詳。但我仍然想要一個答案,因爲它現在只是讓我惱火。Javascript switch not take passed variable

第一個下拉菜單onchange="chngprog(this)"調用這個函數

function chngprog(facility) 
{ 
    if(facility.id == 'facilityview'){ 
     var select = document.getElementById('programview'); 
    } else { 
     var select = document.getElementById('program'); 
    } 
    var testid = facility.value; 
    switch(testid){ 
     <?php global $__CMS_CONN__; 
     $sqlqry = "SELECT * FROM facility_db"; 
     $stmt = $__CMS_CONN__->prepare($sqlqry); 
     $stmt->execute(); 
     $listfacility = $stmt->fetchAll(PDO::FETCH_ASSOC); 
     foreach($listfacility as $case) 
     { 
      echo "case ".$case['id'].":\n"; 
      echo "select.options = '';"; 
      $boom = explode(";", $case['programs']); 
      foreach($boom as $program) 
      { 
       echo "select.options[select.options.length] = new Option('$program', '$program');\n"; 
      } 
      echo "break;\n"; 
     } 
     ?> 
    } 

} 

的PHP創建所有從數據庫中的情況下,因爲有50多個,大概沒有幫助的速度的因素。

頂部的if語句是要確定它正在查看的是哪一組下拉,因爲有2組可以做同樣的事情,但是出於不同的目的。

問題是讓交換機打一個案子。我已經發布了警報以查看會發生什麼,並且所有值都是正確的,但除非指定數字,否則它絕不會遇到任何情況。如果我把switch(20)打到案例20,並將選項添加到第二個下拉列表中,就像它應該那樣。

那麼爲什麼開關沒有評估我放入的變量呢?

+0

我的猜測是'facility.value'未定義 – 2011-03-15 20:58:04

+0

您不顯示您在哪裏調用chongprog(facility),這是testid應該來自哪裏。 – 2011-03-15 20:59:01

+0

如果你在案件中發出警告,案件是否觸發,或者你只是沒有看到你期待的結果? – Dutchie432 2011-03-15 20:59:03

回答

1

是facility.value一個字符串?嘗試

var testid = parseInt(facility.value, 10); 
+0

所有3個答案得到它,但我喜歡這種方法最好。謝謝,我知道這會很簡單。 – Ryan 2011-03-16 12:33:19

1

您的testid可能是一個字符串,您的case語句預計爲整數。

嘗試:

switch (parseInt(testid)) { 
    ... 
1

你可以把它放到之間」你的價值觀,像這樣:

echo "case '" . $case['id'] . "':\n";

如果你不這樣做,你將不得不轉換的變量爲int在與任何值比較之前(我也假設id永遠不會返回與數字不同的任何東西)。