javascript - 在单击带有所有参数的部分单选按钮时提交父表单,而不是在 Rails 中刷新
问题描述
我有一个像这样的部分表格:
parent_form.html.erb
<%= form_for :questions, url: { controller: 'questions', action: 'update' }, method: :put, authenticity_token: true, html: { id: 'questions_form' }, remote: true do |f| %>
<%= render :partial => 'question', :locals => {
:question => question,
:answers => question.answers
} %>
<%= hidden_field_tag :marked_questions_list, '', :id=>'marked_questions_list' %>
<%= hidden_field_tag :hidden_field_2, '', :id => 'hidden_field_2' %>
<button id="mark_question">Mark Question</button>
<%= f.submit 'Answer', :class => '', id: 'answer_btn' %>
_question.html.erb
<div><%= question.body %></div>
<table class="choices">
<% answers.each do |answer| %>
<tr class="answer_selection">
<td class="answer_input" data-update-url="<%= update_path %>" id="answer_input">
<%= radio_button_tag 'question[answer_id]',
answer.id,
false,
{
class: 'answer_option',
# onclick: "this.form.submit();"
onclick: "answerQuestion(#{answer.id});"
} %>
</td>
<td class="answer_text">
<%= label_tag 'question[answer_id]',
html_safe(answer.body_html) %>
</td>
</tr>
<% end %>
</table>
ajax.js
answerQuestion = async (answerId) => {
let updateUrl = document.getElementById('answer_input').dataset.updateUrl;
let marked_questions_list_value = document.getElementById('marked_questions_list').value;
let hidden_field_2_value = document.getElementById('hidden_field_2').value;
let data = { marked_questions_list: marked_questions_list_value, hidden_field_2: hidden_field_2_value }
try {
const resp = await fetch(updateAnswerUrl, {
method: 'POST',
credentials: 'include',
body: data,
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
},
});
const response = await resp.json();
if (response.success) {
document.dispatchEvent(answerEvent);
} else {
alert('Oops !!! Something went wrong. Check Your Internet connection or try refreshing the page');
}
} catch (err) {
alert('Oops !!! Something went wrong. Check Your Internet connection or try refreshing the page');
}
};
answer_btn
在这里,如果我单击parent_form
或如果我使用onclick: this.form.submit();
,则表单将连同所有必需的参数一起提交hidden_field_tag
。如何提交表单而不刷新通过updateQuestion
方法以及hidden_field_tag
其他表单参数单击 radio_button 的部分?基本上,我希望在部分单击任何单选按钮时刷新answer_btn
或onclick: this.form.submit();
不刷新页面的功能,以便我可以answer_button
完全从 parent_form 中删除。中还有另一个按钮Mark Questions
。parent_form
单击此按钮后,其中一个hidden_field_tag
s 被修改。hidden_field_tag
单击任一按钮时从 parent_form 发送到控制器的 s 值从 javascript 更改。所以它们是动态的。所以hidden_field_tag
当我单击部分单选按钮或 parent_form 中的任何按钮时,s 应该存在。
解决方案
根据 rails 的性质,它会刷新,但是,您想要的解决方法是
在控制器中更新后,获取一个 @marked_question_list 并将标记的问题存储在其中。接下来将 hidden_field_2 值存储在 @hidden_field_2 中。
在那个里面创建一个 update.js.erb
$('#marked_questions_list').val(<%=@marked_question_list%>);
$('#hidden_field_2').val(<%=@hidden_field_2%>);
如果我正确理解了您的问题,这应该可以解决您的问题。试试这个,让我知道。
推荐阅读
- javascript - 如何在从帮助脚本导入的变量更改上重新渲染组件?
- python - 如何摆脱错误:jack 服务器未运行或无法启动
- yocto - 如何将内核补丁绑定到不同的配方
- python - 向列表列表中的每个第 n 个元素插入值
- reactjs - 运行“npm run build”时如何忽略文件
- c# - Spotify API 客户端获取播放列表曲目偏移量
- r - 我应该如何处理shinyapp中的twitter auth token?
- linux - Shell 帮助替换双引号
- python - 如何从 python 脚本中使用 7z
- r - 在 facet_grid ggplot 栏中按降序绘制排序值