以远程格式提交嵌入式link_to远程导致表单ajax触发
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了以远程格式提交嵌入式link_to远程导致表单ajax触发相关的知识,希望对你有一定的参考价值。
请考虑以下代码:
<script>
$('#edit_profile_1').on('ajax:before', function(e) {
alert('ajax:before');
}).on('ajax:success', function(e) {
// the form saved, alert the user via frontend visual changes
});
</script>
<%= form_for @profile, remote: true do |f| %>
<p>... Some stuff in form ...</p>
<%= link_to some_path(@profile.some_fk_id), remote: true do %>
Some Link
<% end %>
<%= f.button :submit do %>
Save
<% end %>
<p>... some footer stuff</p>
<% end %>
提交上面的表单时,一切都按预期工作。但是,当点击上面表格中的<% link_to %>
时,它也会触发表单的ajax。
当用户单击表单中的链接时,逻辑是触发后端控制器上的访问检查,并确定javascript
模式是否部分加载或未加载(基于某些业务逻辑)。就目前而言,表单会保存(这不是我们在点击链接时想要的)。
我的问题是,当我只想远程触发链接时,如何保持表单远程触发?
答案
因此,我采用的方法是使用类似的代码检查我在javascript中处理的对象类型(您可以更进一步检查ID的多个表单 - 或者我们在实际代码中做了什么是extend
javascript和传递选项变量):
<script>
$('#edit_profile_1').on('ajax:before', function(e) {
if ($(e.target).is('form')) {
alert('do something with form');
} else {
alert('do something with a non-form');
}
}).on('ajax:success', function(e) {
if ($(e.target).is('form')) {
// ...
} else {
// ...
}
});
</script>
不确定这是否是处理此问题的最有效方法,但它的目的是满足我们的需求。
以上是关于以远程格式提交嵌入式link_to远程导致表单ajax触发的主要内容,如果未能解决你的问题,请参考以下文章