gpt4 book ai didi

ajax - :remote form with multiple submit buttons

转载 作者:行者123 更新时间:2023-12-02 02:29:44 25 4
gpt4 key购买 nike

我似乎无法获得具有多个提交控件的 :remote 表单以在 Rails 3 下工作。以下代码:

<%= form_tag({:action => 'debug'}, {:remote => true}) do %>
<%= submit_tag "Foo" %>
<%= submit_tag "Bar" %>
<% end %>

生成一个带有两个按钮的表单,但生成的 AJAX POST 不包含一个 commit 参数来说明按下了哪个按钮。如果我离开 :remote => true ,正常的 POST 确实包含 commit 参数。

有什么方法可以让它工作,还是只是一个错误?

最佳答案

经过一番摸索,我想我找到了解决办法。

问题是 rails.js 在包含被点击的 submitform 元素上使用了 serializeArray()控制;但表单的序列化数据不包含该控件。但是,JQuery 或 Javascript 会跟踪调用链中的原始事件,从技术上讲,这是相应控件上的“提交”事件。

所以我按如下方式编辑了 rails.js:

callRemote: function (e) {   /* Note - new parameter e */
var el = this,
method = el.attr('method') || el.attr('data-method') || 'GET',
url = el.attr('action') || el.attr('href'),
dataType = el.attr('data-type') || 'script';

if (url === undefined) {
throw "No URL specified for remote call (action or href must be present).";
} else {
if (el.triggerAndReturn('ajax:before')) {
var data = el.is('form') ? el.serializeArray() : [];
/********************/
/* Note new if-test */
/********************/
if (e)
{
data.push({name: e.originalEvent.explicitOriginalTarget.name,
value: e.originalEvent.explicitOriginalTarget.value})
}
/* Function continues as before */

……再往下……

$('form[data-remote]').live('submit', function (e) {
$(this).callRemote(e);
e.preventDefault();
});

这具有在触发 AJAX 之前添加单击按钮的名称-值对的效果。

我对 Javascript 有点陌生,所以如果其中有任何严重错误,请告诉我!

关于ajax - :remote form with multiple submit buttons,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4207202/

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