有条件地根据用户选择渲染表单字段

时间:2012-01-18 02:51:15

标签: ruby-on-rails

该应用程序有几种类型的属性,如房屋,公寓,商店,土地,农场等。

首先,用户在选择字段中选择属性类型,并根据所选属性的类型,我需要仅使用每种属性的特定功能呈现表单的其余部分。我正在使用带有simple_form的嵌套属性。

属性在一个表中注册,该表包含常规属性和具有属性类型的字符串列。其他属性在单独的表中:结构属性(区域,地面大小,地板,房间等),地址(州,市,区)和特定特征(公寓名称,建筑物中的位置等)。 )..

我在jQuery中使用.change()函数找到了类似的东西。但我无法让它在我的rails 3应用程序中运行。我应该使用案例 - 何时,根据所选值呈现每种类型的表单?我应该为每种特定形式使用部分内容吗?

我如何根据表单中选择的属性类型的值,为每种特定类型的属性呈现其余字段?

提前致谢并对可怕的英语表示抱歉。

1 个答案:

答案 0 :(得分:8)

我个人会立刻渲染所有表格,并用css隐藏它们。然后使用jQuery .change()函数检查以查看选择了哪个属性类型,并使用jQuery取消隐藏相应的表单部分。初始加载页面可能会花费更多一些,但它可能比轮询服务器更快/更容易,以便在用户选择后获取相应的表单字段。

一些伪代码看起来像:

形式:

<select id="property_type">
  <option value='type_1'>Type 1</option>
  <option value='type_2'>Type 2</option>
</select>

<div id='type_1' class='type_forms'>
  <form></form>
</div>

<div id='type_2' class='type_forms'>
  <form></form>
</div>

JS:

$('select#property_type').bind('change', function() {
  $('.type_forms').hide();
  $('.type_forms input').attr('disabled', true);
  var selection = $(this).val();
  $('#' + selection).show();
  $('#' + selection + ' input').attr('disabled', false);
}).change();

这绝对可以获得批准,但希望有助于说明这个想法。

如果您需要轮询服务器,您可以在.change()函数中使用ajax调用来通知用户select的控制器操作,然后让它呈现一个适当的部分以显示在ajax回调中。 / p>