ruby-on-rails - 在表单中提交了一个嵌入的远程链接远程导致表单 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>
不确定这是否是处理此问题的最有效方法,但它可以满足我们的需要。
推荐阅读
- ios - 除与 Xcode 连接的设备外,iOS 应用程序在所有设备上崩溃
- javascript - 在 Angular 应用程序中显示服务器端呈现的页面
- drupal - 在 Drupal 上创建具有不同页眉和页脚的页面
- python - 平均每天的产出(周一、周二等)
- php - 强制下载为范围
- python - 在 django 创建模板中创建对象时如何自动插入当前用户?
- java - 将返回值列表的 API 响应转换为 JavaObject
- python - 合并后绘制 2 个数据帧
- java - Apache Tomcat 9 未在 Eclipse 服务器运行时环境中显示
- windows - 在解析命令行参数时尝试使用帮助和详细信息