gpt4 book ai didi

ruby-on-rails-3 - 在 Rails 3, HAML 中使用 JS 将
从远程更改为非远程

转载 作者:行者123 更新时间:2023-12-03 15:10:10 25 4
gpt4 key购买 nike

问题是我有一个远程表单,根据条件,id 喜欢转换为非远程表单(使用 UJS),然后提交。
注意表单有文件上传。

这是详细信息:我最初使用

= form_for @myobj, :url => {:action=>"remoteAction", :controller=>"myobjects"}, :remote => true do |f|
... (f.fields....)

生成 HTML:
<form id="new_myobj" class="new_myobj" method="post" accept-charset="UTF-8" data-remote="true" action="/remoteAction">

当我按预期单击提交时,表单提交为“AS JS”。
在 Controller 操作中,我正在对提交的表单中的字段进行一些验证。
如果所有验证都通过,我执行以下 .js.haml 模板:
$('form#new_myobj').removeAttr("data-remote");
$('form#new_myobj').attr('enctype', 'multipart/form-data');
$('form#new_myobj').attr('action', '/myobjects/regularAction');

它成功地将页面上的 HTML(通过 Firebug 见证)更改为:
<form id="new_myobj" class="new_myobj" method="post" accept-charset="UTF-8" enctype="multipart/form-data" action="/myobjects/regularAction">

由于表单包含 f.file_field,我必须作为多部分提交,以便可以上传图像,并且我无法提交“AS JS”
现在,当我单击提交时,确实调用了 Controller 操作“regularAction”,但它仍然是“AS JS”

问题是,我还需要在 HTML 中进行哪些更改,以便可以非 xhr 提交表单?它与标题有关吗?

最佳答案

jQuery 的数据属性有点棘手,因为它既
读取 HTML5 数据标签以及绑定(bind)到
DOM 元素,也称为数据。写入属性时
该值被复制到 jQuerys 自己的数据存储中(大概
data("remote")正在调用)。

然而,这只发生
如果该名称的 jQuery 数据为空。因此设置该属性只能使用一次 ,之后使用“缓存”值
即使属性发生变化。为了真正摆脱
值,我们需要删除属性和jQuerys自己的存储
方法按顺序。原因是有一个高层
( element.removeData(…) ) 函数和低级函数 ( jQuery.
removeData(element, …)
)。前者重读HTML5数据
属性并将其存储在 jQuery 自己的存储中。使用相当
不寻常的低级功能显然也有效。

此外,我们确实需要删除该属性——将其设置为
false 是不够的,因为 Rails 只检查 form.data('remote')不是未定义的(在 jquery_ujs.js 中查找)。

TL;DR:

  • attr("data-remote") != data("remote")
  • 这两行使表单非远程(再次)。订单很重要。

  •   $("form").removeAttr("data-remote");
    $("form").removeData("remote");

    如果您确实知道要查找的内容,则已记录在案:
  • http://api.jquery.com/jQuery.data/ (低级函数)
  • http://blog.madebydna.com/all/code/2011/12/05/ajax-in-rails-3.html

  • StackOverflow 不允许我发布两个以上的链接,但你可以猜到 removeData 一个。高级功能与低级功能相连。

    避免 Rails 4+ 中的 token 真实性错误 :
    正如 Stan 在下面评论的那样,仅执行上述操作将失败,并显示 InvalidAuthenticityToken错误。解决方法很简单,请参阅此处了解详细信息: https://stackoverflow.com/a/19858504/1684530

    关于ruby-on-rails-3 - 在 Rails 3, HAML 中使用 JS 将 <form> 从远程更改为非远程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9907183/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com