如何在onClick事件中创建循环?

时间:2008-09-14 14:26:51

标签: javascript ruby-on-rails ruby ajax loops

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

如何编写循环代码?

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

3 个答案:

答案 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所需的多次旅行。