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

Javascript 如何在onClick事件中创建循环?,javascript,ruby-on-rails,ruby,ajax,loops,Javascript,Ruby On Rails,Ruby,Ajax,Loops,我想编写一个onClick事件,它多次提交表单,在多选字段中遍历所选项目,每次提交一次 如何对循环进行编码? 我正在RubyonRails中工作,并使用remote_function()为ajax调用生成JavaScript。我的快速答案(我还没有编写过代码)是创建另一个函数,该函数使用XMLHTTPRequest和单个调用的特定参数创建POST。然后在onClick()处理程序中,在循环遍历选定项时调用该函数 我建议您仅使用一个虚拟HTML页面和javascript进行概念验证,然后尝试找出如

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

如何对循环进行编码?

我正在RubyonRails中工作,并使用
remote_function()
为ajax调用生成JavaScript。

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

我建议您仅使用一个虚拟HTML页面和javascript进行概念验证,然后尝试找出如何使其在RoR中工作


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

您必须手动编写一些javascript。Rails的生成器不会为您完成如此复杂的任务

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


弗斯特
第二
第三
第四
submitFormMultipleTimes=函数(){
$F('select-box')。每个(函数(selectedItemValue){
new Ajax.Request('/somewhere?val='+selectedItemValue,
{method:'POST',postBody:Form.serialize('my-Form')};
});
}
注:

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

  • 使用
    Ajax.Request
    将数据作为
    POST
    发送到服务器
    对于服务器来说,这与提交普通表单完全相同

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


    • 除非您正在修改浏览器DOM,否则我想不出您希望这样做的原因。(但在不完全了解您试图做什么的情况下,我可能会在本例中出错=)

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

      rails代码很有可能比您提出的任何javascript都要简单得多,更容易编写(也更容易调试!)

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

      您还将(大)受益于仅一个服务器往返,而不是使用多个POST所需的多次往返

      <%= 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>