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