我有一个带有选择框和三个文本输入框的表单。当选择框中的选项发生更改时,我希望使用与所选选项对应的值更新三个文本输入框。值是存储在服务器上的模型对象。
我正在使用Rails 3并试图保持不引人注意的东西,但我找不到干净的方法来做到这一点。我想出了几个可怕的,凌乱的解决方案,但还没有干净。将这一切联系在一起的好方法是什么?特别是,我遇到了从服务器请求模型对象的select元素的问题。
以下是生成表单的视图:
= form.select :region_id, region_options_for_select(@business_location.region), :prompt => '-- Region --'
= form.text_field :city
= form.text_field :state, :label => 'Province/State'
= form.text_field :country
因此,每当“地区”发生变化时,我希望填充城市/州/国家/地区字段。请注意,区域也是表单本身的一部分。
答案 0 :(得分:3)
在jQuery中,这样的东西可以起作用:
$("select").live("change", function(e) {
e.preventDefault();
$.ajax({
url: "/location/" + $(this).val(), //I think, it could be something else
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function(data) {
//you're returning a JSON object, so just iterate through it and bind it to
//the value attributes of each field
},
error: function(xhr,exception,status) {
//catch any errors here
}
});
});
在Rails端,在LocationsController#show:
中@location = Location.find(params[:id])
respond_to do |format|
format.json { render :json => @location.to_json, :status => 200 }
end
这大致是如何运作的。将你所拥有的控制器/型号名称替换为我所组成的名称。