:remote => true/data-remote 在通过 ajax 加载的表单上

:remote => true/data-remote on a form loaded via ajax

提问人:razenha 提问时间:11/7/2012 最后编辑:razenha 更新时间:9/6/2013 访问量:1640

问:

在我的 Rails 应用程序中,我有一个使用 jQuery 加载方法通过 Ajax 加载的表单。

function load_sales_form(product_id) {
    $("#sales_form").load("<%= url_for(:action => :show_sales_form) %>"/ + product_id);
}

加载的表单具有带有 :remote => true 选项的 form_for 标记,并且它确实将 data-remote=“true” 属性添加到表单中。

但是,当用户单击提交标记按钮时,不会使用 Ajax 提交表单。如果表单以标准的非 ajax 方式加载,它可以正常工作,但是表单是在文档准备好后通过 ajax 加载的,它不使用 ajax 提交,而是作为标准表单提交。

从我到目前为止的研究来看,发生这种情况是因为 rails.js 文件(其中包含允许通过 ajax 提交数据远程表单的内容)没有将其功能应用于通过 ajax 加载的 html 内容。

是否可以强制rails.js文件将其功能应用于通过Ajax加载的内容?

ruby-on-rails-3 jquery unobtrusive-javascript

评论

0赞 PinnyM 11/7/2012
您似乎在以下位置缺少一个右括号url_for
1赞 Damien 11/8/2012
旁注:调试 javascript 时,请始终打开 javascript 控制台。如果某些东西不起作用,第一点就是寻找错误。使用 AJAX,请确保您已准备好查看 xhr 请求和错误,例如 Chrome 网络监视器。
0赞 razenha 11/8/2012
Zenph:不确定这在这种特殊情况下对我有什么帮助,因为我们的内部服务器没有javascript错误。
0赞 Mark G 3/4/2013
你有没有想过这一点?我看到了同样的事情,通过ajax调用加载的内容不会被UJS的东西识别。UJS 的东西已经在页面加载时“触发”了,这是有道理的,但我找不到任何人谈论“重新触发”它们的原因。
0赞 razenha 3/5/2013
很抱歉,不可以。我不得不改变我期望在我的应用程序中使用 Ajax 的方式。

答:

2赞 Zajo 9/6/2013 #1

这里也是同样的情况。我找到了一个解决方案。 不是动态加载,而是错误触发事件是我的情况。submit

我有一个设置了属性的 Bootstrap 模式。这会导致 中的内容通过 AJAX 从 中指定的地址加载。data-targethref.modal-bodyhref

该模态预装了保存按钮(在加载的表单之外),它像这样调用提交。

$modal.find("form.loaded_form").get(0).submit(); // INCORRECT

前者只执行原始提交,但是:

$modal.find("form.loaded_form").trigger('submit'); // CORRECT

做到了诀窍。