我想编写一个onClick
多次提交表单的事件,遍历多选字段中的选定项目,每个提交一次。
如何编码循环?
我正在使用 Ruby on Rails 并remote_function()
用于为 ajax 调用生成 JavaScript。
我想编写一个onClick
多次提交表单的事件,遍历多选字段中的选定项目,每个提交一次。
如何编码循环?
我正在使用 Ruby on Rails 并remote_function()
用于为 ajax 调用生成 JavaScript。
我的快速回答(因为我还没有编写代码)是创建另一个函数,该函数使用 XMLHTTPRequest 和单个调用的特定参数创建一个 POST。然后在你的 onClick() 处理程序中调用该函数,因为你循环通过你选择的项目。
我建议你只使用一个虚拟的 HTML 页面和 javascript 来做一个概念证明,然后尝试弄清楚如何让它在 RoR 中工作。
另外,您为什么要尝试从浏览器进行多次调用,而不是在 RoR 控制器中处理循环条件?
您必须手动编写一些 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
中获取数据并将其粘贴到请求的正文中。
如果您正常提交表单,这与发送的数据完全相同
除非您正在修改浏览器 DOM,否则我想不出您想要这样做的理由。(但是在不完全了解您要做什么的情况下,在这种情况下我可能是错的=)
您应该能够在一个 POST 中从多个对象(甚至是表单中嵌套的复杂对象)发回数据。
与您想出的任何 javascript 相比,rails 代码可能会更简单、更容易编写(并且更容易调试!)。
如果您需要根据用户选择的内容更新页面的不同部分,您仍然可以通过 RJS 在您的 render :update 块中对 DOM 进行多次更新,所以这应该不是问题。
您还将获得仅一个服务器往返的(大)好处,而不是使用多个 POST 所需的多次旅行。