2010-10-12 56 views
3

我正在設置動態下拉菜單:選擇#分類上的選項會通知select#subcat的內容。JQuery:.change中的變量不會顯示在.load中

這是選擇#類別中的HTML:

<select name="category" id="category"> 
    <option>Click Here to choose a category</option> 
      <?php foreach ($categories as $key => $category) { ?> 
    <option value="<?php echo $key ?>"><?php echo $category ?></option> 
      <?php } ?>   
</select> 

<select name="subcat" id="subcat"> 
    <option>&lt;-- First Choose a Category</option>       
</select> 

這是jQuery的語句:

$(document).ready(function(){ 
    $("select#category").change(function(){ 
     $("select#subcat").load("subcats.php",{ id: $(this).val(), ajax: 'true'}); 
    }); 
}); 

這是subcats.php:

<?php 
     //source of categories 
     include("config.php") ; 
     //initiate option list 
     $options = '<option value="">Choose a Sub-category</option>'."\n" ; 
     if(!empty($_GET["id"])) { 
     //iterate through the categories 
     foreach ($categories as $key => $category) { 
     if ($_GET["id"] == $key) { 
     //select the data source 
     $subcats = file('subcat/'.$key.'.dat', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES) ; 
     natsort($subcats); 
     //create the rest of the option list 
      foreach ($subcats as $subcat) { 
      list ($subname,$subkey) =explode ("\t", $subcat) ; 
      $options .= '<option value="'.$subkey.'">'.$subname.'</option>'."\n" ; 
     } 
     echo $options ; 
      } 
     } 
     } else { 
     // if no variable given provide option list as error check 
     echo '<option value="">&lt;-- Choose a Category First</option> 
     <option value="">Foo Bar</option>'."\n" ; 
      } 
     ?> 

我的理解是, id: $(this).val()提供從select#category中選擇的選項以供在php文檔中使用;我離開這裏嗎?真的,如果我正在閱讀文檔,我甚至不需要, { id: $(this).val(), ajax: 'true'}位 ajax請求.load正在工作,因爲錯誤檢查菜單項出現在select#subcats中。

然而,這一切都顯示:變量似乎不應該堅持下去......

Li'l幫助嗎?提前致謝!

+0

呢'$(本).VAL()'不是指'$(「#選擇SUBCAT 「)'? – 2010-10-12 14:24:51

+0

這裏'this'是在'select#category'更改處理程序的上下文中的,所以它應該仍然是'select#category'。 – VoteyDisciple 2010-10-12 14:26:34

回答

0

使用console.log($(this).val()) .load前調試提交的值

你確定的數據是每GET方法發送?

實施例:與上述相同,但將POST 附加參數到 服務器並在服務器完成 響應時執行 回調。

$("#feeds").load("feeds.php", {limit: 25}, function(){ alert("The last 25 entries in the feed have been loaded"); });

和評價下如發現上http://api.jquery.com/load/

根據文檔:「如果數據 提供作爲對象時,使用 POST方法;否則,GET 假設。」

你可以簡單地使用$_REQUEST['id']代替$_GET['id']$_POST['id']既包括(見php.net::$_REQUEST更多信息)

+0

是的!謝謝!!當我將其更改爲$ _POST(或$ _REQUEST)時,它工作正常;我可以將ID作爲:「id:$(this).val()」(這是我唯一沒有試過的東西,我認爲) – 2010-10-12 16:05:33

0

在你的情況this屬於select#subcat。嘗試使用此代碼:

$(document).ready(function(){ 
    $("select#category").change(function(){ 
     $("select#subcat").load("subcats.php",{ id: $("select#category").val(), ajax: 'true'}); 
    }) 
}) 
+0

Alexander - 在代碼中,'this'實際上仍然會引用'select#category'。如果它是在'.load()'方法的回調函數中,它只會引用'select#subcat'。實際上,它只是作爲第二個參數傳遞給'.load()'的對象的一部分。因此''(this).val()'將在'.load()'運行前評估。 :o) – user113716 2010-10-12 14:31:05