В начале обучения тому, как реализовать ненавязчивые js (используя Rails & jQuery), я столкнулся с проблемой того, как (повторно) связать кнопку / форму отправки после .load (ing) нового контента, который включает форму.
Я создал форму «Создать новый элемент», чтобы показывать ее в верхней части списка элементов (когда пользователь нажимает кнопку «Создать»)
sale_case / шоу / _requirments_new.html.haml:
- form_for ([@sale_case, @sale_case_requirement]), :html => { :id => 'requirement_form', :class => "submit-with-ajax"} do |f|
...
%button{ :type => "submit" } Save Requirement
application.js:
jQuery(document).ready(function() {
jQuery(".submit-with-ajax").submitWithAjax();
}
...
jQuery.ajaxSetup({
'beforeSend': function(xhr) {xhr.setRequestHeader("Accept", "text/javascript")}
})
jQuery.fn.submitWithAjax = function() {
this.submit(function() {
jQuery.post(this.action, jQuery(this).serialize(), null, "script");
return false;
})
return this;
};
requirements_controller.rb:
def create
@sale_case_requirement = @sale_case.requirements.new(params[:requirement])
if @sale_case_requirement.save
@message = "Success..."
@success = true
#...
respond_to do |format|
format.js
end
end
Требования / create.js.erb:
mesg("<%= @message %>");
<%- if @success %>
jQuery("#requirement_form")[0].reset();
jQuery('#requirements').load('<%= requirements_view_sale_case_requirements_path(@sale_case.id) %>' );
<% end %>
В первый раз все работает хорошо, ненавязчиво. Проблема возникает, когда пользователь создает второй элемент (в форме, загруженной через ajax).
Кнопка не привязывается к функции submitWithAjax. Как вы это делаете, когда .load (ing) контента?
В итоге мне пришлось сделать это частично (навязчиво), чтобы заставить его работать, но это мешает мне не иметь возможности понять это. :
%button{ :type => "submit", :onclick => "jQuery.post('#{sale_case_requirements_path(@sale_case.id, @sale_case_requirement.id)}', jQuery('#requirement_form').serialize(), null, 'script'); return false;"} Save Requirement