Вы можете использовать ненавязчивый jQuery и атрибут данных.
Например, в моем приложении у меня есть большая форма с набором полей «адрес», в котором пользователь должен:
- напиши свой адрес и затем
- нажмите кнопку "проверить", чтобы отобразить небольшую карту Google, чтобы увидеть, является ли введенный адрес правильным.
Конечно, после того, как он нажал кнопку "Проверить", я хочу снова визуализировать форму, но с привязкой к этому набору полей адреса, где отображается карта.
Это мой .erb шаблон:
<fieldset id="address" data-preview="<%= params[:preview] ? true : false -%>">
<legend>Write you address here, then check it</legend>
<div class="field">
<%= f.text_field :address %>
<input id="preview-button" type="submit" name="preview" value="check">
</div>
</fieldset>
Когда нажата кнопка проверки, она установит params[:preview]
. В моем контроллере действие create
выглядит так:
def create
@obj = current_user.objs.new(params[:obj])
if params[:preview]
# geocoding code, and then:
render action: "edit"
else
#...
end
end
Таким образом, редактирование действия будет выполнено с params[:preview]
, все еще определенным, и это установит для #address fieldset data-preview значение true. А именно, эта строка HTML будет отображаться:
<fieldset id="address" data-preview="true">
Теперь все, что мне нужно сделать, это извлечь эту информацию через javascript и, если data-preview
равен true
, переместить местоположение окна на якорь #address
. Вот мой ненавязчивый код jQuery:
$(function() {
var preview = $("#address").data('preview');
if (preview == true){
window.location = window.location.href + "#address";
};
});
И это все!