rails 3 form partial
导轨3形成局部
<%= form_for(answer, :remote => true) do |f| %>
<% if answer.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(answer.errors.count, "error") %> prohibited this answer from being saved:</h2>
<ul>
<% answer.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= f.hidden_field :conduct_evaluation_id, :value => conduct_evaluation.id %>
</div>
<div class="field">
<%= f.hidden_field :question_id, :value => question.id %>
</div>
<div class="field">
<%= f.hidden_field :program_block_id, :value => conduct_evaluation.program_block_id %>
</div>
<div class="field">
<%= f.radio_button :answer, true, :onchange => "$(this.form).trigger('submit.rails');" %>yes<br/>
<%= f.radio_button :answer, false, :onchange => "$(this.form).trigger('submit.rails');" %>no<br/>
</div>
<div class="actions">
<%= f.submit "Answer" %>
</div>
<% end %>
controller actions
# POST /answers
# POST /answers.json
def create
@answer = Answer.new(params[:answer])
@answer.user = current_user
@answer.conduct_evaluation = ConductEvaluation.find(params[:answer][:conduct_evaluation_id])
respond_to do |format|
if @answer.save
format.js { }
format.html { redirect_to @answer, notice: 'Answer was successfully created.' }
format.json { render json: @answer, status: :created, location: @answer }
else
format.js { }
format.html { render action: "new" }
format.json { render json: @answer.errors, status: :unprocessable_entity }
end
end
end
# PUT /answers/1
# PUT /answers/1.json
def update
@answer = Answer.find(params[:id])
respond_to do |format|
if @answer.update_attributes(params[:answer])
format.js { }
format.html { redirect_to @answer, notice: 'Answer was successfully updated.' }
format.json { head :no_content }
else
format.js { }
format.html { render action: "edit" }
format.json { render json: @answer.errors, status: :unprocessable_entity }
end
end
end
Can anyone tell me what I am doing wrong to make the javascript submit via ajax? When I use the submit button, the request is sent via ajax. If I use the onchange event for the radio button and attempt to submit the form via javascript, it thinks the request is HTML.
任何人都可以通过ajax告诉我我做错了什么?当我使用提交按钮时,请求通过ajax发送。如果我使用onchange事件作为单选按钮并尝试通过javascript提交表单,它认为请求是HTML。
Any help would be much appreciated!
任何帮助将非常感激!
-J
EDIT: So when I use the form submit button, the request is slightly different:
编辑:所以当我使用表单提交按钮时,请求略有不同:
Processing by AnswersController#create as JS
Parameters: {"utf8"=>"✓", "authenticity_token"=>"IcJkV1GnIOEGRs7kaRuVQsp0sTNtHQw0Q+HMM7m/mV0=", "answer"=>{"conduct_evaluation_id"=>"15", "question_id"=>"1", "program_block_id"=>"1", "answer"=>"true"}, "commit"=>"Answer"}
versus using the onchange javascript to trigger a rails.submit event:
与使用onchange javascript触发rails.submit事件:
Processing by AnswersController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"IcJkV1GnIOEGRs7kaRuVQsp0sTNtHQw0Q+HMM7m/mV0=", "answer"=>{"conduct_evaluation_id"=>"15", "question_id"=>"1", "program_block_id"=>"1", "answer"=>"true"}}
Does anyone know why this may be occurring? Do I need to specify additional parameters when triggering the submit.rails event? Please help! :-D
有谁知道为什么会这样?触发submit.rails事件时是否需要指定其他参数?请帮忙! :-D
EDIT 2: So I found a workaround. It works if I bind the change event for the radio buttons to actually clicking the submit button. This is not the ideal solution, but at least it works.
编辑2:所以我找到了一个解决方法。如果我将单选按钮的更改事件绑定到实际单击提交按钮,它就可以工作。这不是理想的解决方案,但至少它可行。
EDIT 3: I have decided on the following coffeescript:
编辑3:我已决定以下coffeescript:
$(document).ready ->
$('#my_form input:submit').hide()
$('#my_form input:radio').change ->
$.ajax
type: $(this.form).attr('method')
url: $(this.form).attr('action')
data: $(this.form).serialize()
dataType: 'script'
This allows the corresponding js action file to be returned as the response and be automatically executed on success.
这允许相应的js动作文件作为响应返回,并在成功时自动执行。
1 个解决方案
#1
0
Using onchange()
bypasses Rails magic so it won't submit the form as you wish. Write your own change method, f.e.:
使用onchange()会绕过Rails魔法,因此它不会按照您的意愿提交表单。写下你自己的改变方法,f.e。:
$('input.radio_button_selector').change( function() {
$.ajax({
url: $('#my_form').attr('action'),
data: $('#my_form').serialize()
});
});
#1
0
Using onchange()
bypasses Rails magic so it won't submit the form as you wish. Write your own change method, f.e.:
使用onchange()会绕过Rails魔法,因此它不会按照您的意愿提交表单。写下你自己的改变方法,f.e。:
$('input.radio_button_selector').change( function() {
$.ajax({
url: $('#my_form').attr('action'),
data: $('#my_form').serialize()
});
});