2011-04-14 94 views
0

我有一個允許用戶選擇國家的表單。根據所選國家/地區的不同,我需要更改州/省下拉菜單,以包含州或州列表。我正在使用observe_field標籤去做這件事,但這是在第三軌貶值... ...Rails,javascript和更新表格

所以......現在應該怎麼做呢?我正在使用select_tag填充下拉列表,並且options_for_select中使用的陣列全部存儲在服務器端,並且可在控制器操作中訪問,因此我無法從JavaScript訪問它們。

回答

4

使用卡門寶石:https://github.com/jim/carmen

我以前做過以下(AJAX)。

HTML:

<p> 
     <label>Country <span>*</span></label> 
     <%= profile_form.select(:country,Carmen.countries, {:include_blank => 'Select a Country'}, :id => "profile_country") %> 
    </p> 
    <p> 
     <label>State <span>*</span></label> 
     <%= profile_form.select(:state, "" , {:include_blank => 'Select a Country first'}, :id => "profile_state") %> 
    </p> 

控制器:

def states 
    begin 
    render :json => Carmen::states(CGI::unescape(params[:country])) 
    rescue 
    render :json => {"content" => "None"}.to_json 
    end 
end 

的Javascript使用jQuery:

$('#profile_country').change(function() { 
    if ($(this).val() == '') 
    { 
     $('#profile_state').empty(); 
     $('#profile_state').append($('<option>No state provided for your country</option>')); 
    } 
    else { 
     $.ajax({ 
      type: "GET", 
      url: "/remote/get_states/" + encodeURIComponent($(this).attr('value')), 
      success: function(data){ 
       if (data.content == 'None') 
       { 
        $('#profile_state').empty(); 
        $('#profile_state').append($('<option>No state provided for your country</option>')); 
       } 
       //handle the case where no state related to country selected 
       else 
      { 
       $('#profile_state').empty(); 
       $('#profile_state').append($('<option>Select your State</option>')); 
       jQuery.each(data,function(i, v) { 
       $('#profile_state').append($('<option value="'+ data[i][1] +'">'+data[i][0] +'</option>')); 
      }); 
     } 
     } 
     }); 
    } 
}); 
+0

爲了誰也許不知道爲什麼上面的代碼是不工作的用戶,請加JS在$(document).ready(function(){......});塊 – 2011-10-24 02:32:16