RoR:Showing/hiding 加载编辑页面时基于用户选择的字段?
RoR: Showing/hiding fields based on user selection when loading edit page?
我有一个下拉菜单,用户可以在其中进行选择,然后会出现部分中的相应字段供他们完成。
我的表单域
<%= f.simple_fields_for :security do |security| %>
<%= security.label :security_type %>
<%= security.select :property_type, Security.property_types.keys, {}, class: 'project-dropdown-
width', id: "security" %>
<div id="property-fields">
<%= render partial: "project_steps/security_partials/property", security: @security, locals: { security: security } %>
</div>
<div id="other-fields" style="display: none;">
<%= render partial: "project_steps/security_partials/land", security: @security, locals: { security: security } %>
</div>
<% end %>
application.js
document.addEventListener('turbolinks:load', () => {
const element = document.getElementById('security');
if (element) {
$('#security').change((e) => {
if (e.target.value == 'other') {
$('#property-fields').eq(0).hide();
$('#other-fields').eq(0).fadeIn();
}
else {
$('#property-fields').eq(0).fadeIn();
$('#other-fields').eq(0).hide();
}
});
}
});
这适用于根据用户在表单中单击的选项显示和隐藏必填字段。但是,当用户保存、前进,然后再次返回页面(进行编辑)时,所选选项是正确的,但如果他们在此示例中选择了 'other',则字段不正确。它会显示 'Property' 个字段。
如果用户返回页面进行编辑,我如何才能根据用户选择的选项显示正确的字段?
有
下面的代码片段是您的解决方案示例。请尝试执行它,如果有任何不合理之处请在评论中告诉我。
当您从 select 下拉菜单中更改选项时,它将在 select 或 $("#security")
上调用 .change
事件。
同样,您可以通过 jQuery 这行代码 $("#security").val()
获得当前 selected 值
因此,您只需要在编辑页面上预先 select 编辑值,您就会有基于该值的字段。
// document.addEventListener('turbolinks:load', () => {
// const element = document.getElementById('security');
// if (element) {
$('#security').change((e) => {
showFields(e.target.value)
});
showFields($('#security').val());
function showFields(val) {
if (val == 'other') {
$('#property-fields').eq(0).hide();
$('#other-fields').eq(0).fadeIn();
}
else {
$('#property-fields').eq(0).fadeIn();
$('#other-fields').eq(0).hide();
}
}
// }
// });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select id="security">
<option value="propertis">Properties</option>
<option value="other" selected>other</option>
</select>
<div id="property-fields">
These are property-fields
</div>
<div id="other-fields" style="display: none;">
These are other-fields
</div>
我有一个下拉菜单,用户可以在其中进行选择,然后会出现部分中的相应字段供他们完成。
我的表单域
<%= f.simple_fields_for :security do |security| %>
<%= security.label :security_type %>
<%= security.select :property_type, Security.property_types.keys, {}, class: 'project-dropdown-
width', id: "security" %>
<div id="property-fields">
<%= render partial: "project_steps/security_partials/property", security: @security, locals: { security: security } %>
</div>
<div id="other-fields" style="display: none;">
<%= render partial: "project_steps/security_partials/land", security: @security, locals: { security: security } %>
</div>
<% end %>
application.js
document.addEventListener('turbolinks:load', () => {
const element = document.getElementById('security');
if (element) {
$('#security').change((e) => {
if (e.target.value == 'other') {
$('#property-fields').eq(0).hide();
$('#other-fields').eq(0).fadeIn();
}
else {
$('#property-fields').eq(0).fadeIn();
$('#other-fields').eq(0).hide();
}
});
}
});
这适用于根据用户在表单中单击的选项显示和隐藏必填字段。但是,当用户保存、前进,然后再次返回页面(进行编辑)时,所选选项是正确的,但如果他们在此示例中选择了 'other',则字段不正确。它会显示 'Property' 个字段。
如果用户返回页面进行编辑,我如何才能根据用户选择的选项显示正确的字段?
有
下面的代码片段是您的解决方案示例。请尝试执行它,如果有任何不合理之处请在评论中告诉我。
当您从 select 下拉菜单中更改选项时,它将在 select 或 $("#security")
上调用 .change
事件。
同样,您可以通过 jQuery 这行代码 $("#security").val()
因此,您只需要在编辑页面上预先 select 编辑值,您就会有基于该值的字段。
// document.addEventListener('turbolinks:load', () => {
// const element = document.getElementById('security');
// if (element) {
$('#security').change((e) => {
showFields(e.target.value)
});
showFields($('#security').val());
function showFields(val) {
if (val == 'other') {
$('#property-fields').eq(0).hide();
$('#other-fields').eq(0).fadeIn();
}
else {
$('#property-fields').eq(0).fadeIn();
$('#other-fields').eq(0).hide();
}
}
// }
// });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select id="security">
<option value="propertis">Properties</option>
<option value="other" selected>other</option>
</select>
<div id="property-fields">
These are property-fields
</div>
<div id="other-fields" style="display: none;">
These are other-fields
</div>