3

我想编写一个onClick多次提交表单的事件,遍历多选字段中的选定项目,每个提交一次。

如何编码循环?

我正在使用 Ruby on Rails 并remote_function()用于为 ajax 调用生成 JavaScript。

4

3 回答 3

5

我的快速回答(因为我还没有编写代码)是创建另一个函数,该函数使用 XMLHTTPRequest 和单个调用的特定参数创建一个 POST。然后在你的 onClick() 处理程序中调用该函数,因为你循环通过你选择的项目。

我建议你只使用一个虚拟的 HTML 页面和 javascript 来做一个概念证明,然后尝试弄清楚如何让它在 RoR 中工作。

另外,您为什么要尝试从浏览器进行多次调用,而不是在 RoR 控制器中处理循环条件?

于 2008-09-14T14:43:44.203 回答
2

您必须手动编写一些 javascript。Rails 的生成器不会为您做如此复杂的事情。

不过,Prototype.js 将为您完成几乎所有繁重的工作。在我的脑海中,代码看起来像这样:(未测试)

<%= javascript_include_tag 'prototype' %>

<form id="my-form">
  <input type="text" name="username" />

  <select multiple="true" id="select-box">
    <option value="1">First</option>
    <option value="2">Second</option>
    <option value="3">Third</option>
    <option value="4">Fourth</option>
  </select>
</form>

<script type="text/javascript" language="javascript">
submitFormMultipleTimes = function() {
  $F('select-box').each(function(selectedItemValue){
    new Ajax.Request('/somewhere?val='+selectedItemValue, 
      {method: 'POST', postBody: Form.serialize('my-form')});
  });
}
</script>

<a href="#" onclick="submitFormMultipleTimes(); return false;">Clicky Clicky</a>

笔记:

  • 使用 Prototype 的$F()方法获取选中项的值。它返回一个用于多选框的数组

  • 用于将Ajax.Request数据作为POST.
    对服务器来说,这看起来和提交一个普通的表单完全一样

  • 用于从表单Form.serialize中获取数据并将其粘贴到请求的正文中。
    如果您正常提交表单,这与发送的数据完全相同

于 2008-09-14T21:06:36.687 回答
1

除非您正在修改浏览器 DOM,否则我想不出您想要这样做的理由。(但是在不完全了解您要做什么的情况下,在这种情况下我可能是错的=)

您应该能够在一个 POST 中从多个对象(甚至是表单中嵌套的复杂对象)发回数据。

与您想出的任何 javascript 相比,rails 代码可能会更简单、更容易编写(并且更容易调试!)。

如果您需要根据用户选择的内容更新页面的不同部分,您仍然可以通过 RJS 在您的 render :update 块中对 DOM 进行多次更新,所以这应该不是问题。

您还将获得仅一个服务器往返的(大)好处,而不是使用多个 POST 所需的多次旅行。

于 2008-09-17T01:39:58.727 回答