请教:三级联动下拉框的“联动”问题

请教:三级联动下拉框的“联动”问题

目标是要实现一个选择省、市、县(区)的三级联动下拉菜单。

test.rhtml的代码:
<%= javascript_include_tag :defaults %>
<%= select(:city, :province_id, @provinces, options = {},
 html_options = {"onchange" => remote_function(
  :with => "'province_id='+value",
  :update => 'city_select',
  :url => { :action => :select_cities_with_ajax })})
%>

<div id='city_select'>
<%= select( :county, :city_id, @cities, options = {},
 html_options = { "onchange" => remote_function(
  :with => "'city_id='+value",
  :update => 'county_select',
  :url => { :action => :select_counties_with_ajax })})
%>
</div>
<div id='county_select'><%= select(:sth, :county_id, @counties) %></div>

_select_city.rhtml代码:
<%= select(:county, :city_id, @cities, {},
 {"onchange" => remote_function(
  :with => "'city_id='+value",
  :update => 'county_select',
  :url => { :action => :select_county_with_ajax } )} )
%>

_select_county.rhtml代码:
<%= select(:sth, :county_id, @sights) %>

controller代码:
def select_city_with_ajax
 @cities = Province.find(params[:province_id]).cities.map{|u| [u.name,u.id]}
 render :partial => "select_city"
end

def select_county_with_ajax
 @counties = City.find(params[:city_id]).counties.map{|u| [u.name,u.id]}
 render :partial => "select_county"
end

ok。这段代码是可以工作的,选择省份以后相应的城市列表会变,选择城市以后相应的区县列表也会变。但是,选择省份以后,一定要经过一个“选择城市”的过程,区县列表才会改变。如果你要选择的城市正好排在第一位的话,那就要先选一个其他城市,再选择这个城市,这个城市的区县列表才会出现。这已经够麻烦了;并且,如果是直辖市,由于没有办法选择其他城市,导致select_city的onchange事件不能触发,区县列表根本出不来。

一个解决的思路是增加一个“请选择城市”“请选择区县”这样的附加选项。但是我总觉得这种方法不够完美,php?name=%BA%C7%BA%C7" onclick="tagshow(event)" class="t_tag">呵呵。那么,还有其他更好的办法吗?
1、你想要的就是在选择某个省后,下面的市以及县都要出来。那就在选择省时取出一个默认市出来,如果它下面有县,就把县的view也渲染出来。如果没有则不渲染
2、遇到直辖市,一样的处理,action中判断有没有子类别了,没有则不渲染相应的下级
试试看~~我们就是这么用的.
嗯,你说的对。我其实考虑过这个方法,但是当时脑袋里闪过的念头是这样做我需要每个省设定一个默认的市、每个市设定一个默认的县(区),很麻烦。

现在回头一想……