2013-07-14 83 views
0

我正在做一個ajax調用,我想根據結果修改選擇框。我遇到的問題是dom元素在ajax調用中沒有作用域,所以我找不到它的同級並用數據修改它們。澄清看看下面的HTMLajax如何將dom元素傳遞給ajax調用

<div class="field_group"> 
    <select name="example1"> 
     <option value="something">something</option> 
    </select> 

    <select name="example2"> 
     <option value="something">something</option> 
    </select> 

</div> 

基本上,當例1改變我修改例2的數據。值得注意的是,在任何情況下,我都不能使用某種直接選擇器來解決我的問題,因爲此頁面上的所有字段都是動態選擇的,可能有0到1000個字段。下面是我的實際代碼

$(".landscape_type").on('change',function(){ 
var my_landscape_type = $(this); 
console.log($(this).val()); 
var product_category = $(this).val(); 
$.post('/quotes/ajax_get_quote_products/'+product_category, function(data,my_landscape_type) { 
     var data_object = JSON.parse(data); 
     console.log(data_object); 
     console.log('should output here'); 
     console.log(my_landscape_type.val()); 
     if(data_object["error"]) { 
      alert(data_object["error"]); 
      my_landscape_type.parents('.field_group').children(".landscape_product").empty(); 
      my_landscape_type.parents('.field_group').children(".landscape_product").append("<option selected='selected' value='-1'>No Products Found!</option>"); 
     } else { 
      my_landscape_type.parents('.field_group').children(".landscape_product").empty(); 
      my_landscape_type.parents('.field_group').children(".landscape_product").append("<option selected='selected' value='-1'>Select a Product...</option>"); 
      for (index in data_object) { 
       my_landscape_type.parents('.field_group').children(".landscape_product").append("<option value='"+data_object[index]["product_id"]+"'>"+data_object[index]["product_name"]+"</option>"); 
       console.log(data_object[index], index); 
      } 
     } 
    }); 
}); 

如果你看一下,說要在這裏輸出,您可以看到我應該得到my_landscape_type的價值線之下,但因爲我不明白它已經失去範圍和傳球這是我的方式不起作用。

+0

嘗試從您的回調函數參數 –

+0

沒想到這將是簡單的刪除'my_landscape_type',但事實證明這是...謝謝你 – ed209

+0

很樂意幫忙。我發佈了一個解釋的答案 –

回答

1

你的變量不具有適用範圍,就是你從$.post回調函數的參數覆蓋它,所以從參數列表中刪除它,你應該罰款。

.post回調參數:

success(data, textStatus, jqXHR) 
0

如果你有很多這些領域,也許你可以給他們ID並通過適當的AJAX調用。然後做你需要做的事情,並返回你的回調中需要更新的ID。然後,你可以不喜歡

var val = $('.landscape_type#'+id).val(); 
+0

在這種特殊情況下,由於用戶可以添加和刪除表單中的字段,這會很麻煩,但我明白你的意思了 – ed209