2008-09-14 2 views
3

Я хочу написать событие onClick, которое отправляет форму несколько раз, итерации по выбранным элементам в поле с несколькими выборами, отправляя один раз для каждого.Как создать цикл в событии onClick?

Как закодировать цикл?

Я работаю в Ruby on Rails и используя remote_function() для генерации JavaScript для вызова ajax.

ответ

4

Мой быстрый ответ (поскольку я еще не закодировал его) должен был создать другую функцию, которая создает POST с использованием XMLHTTPRequest и конкретные параметры для одного вызова. Затем внутри вашего обработчика onClick() вы вызываете эту функцию при прохождении через выбранные вами элементы.

Я бы предположил, что вы делаете Доказательство концепции только с помощью фиктивной HTML-страницы и javascript, а затем попытаетесь выяснить, как заставить ее работать в RoR.

Кроме того, почему вы пытаетесь сделать несколько вызовов из браузера, а не обрабатывать условия циклирования в контроллере RoR?

2

Вам придется вручную написать javascript. Генераторы Rails не будут делать что-то подобное для вас.

Prototype.js сделает практически все тяжелые работы для вас. С верхней части моей головы, код будет выглядеть следующим образом: (UNTESTED)

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

Примечание:

  • Использование $F() метод Prototype, чтобы получить выбранные значения элемента. Он возвращает массив для блоков с множественным выбором

  • Использование Ajax.Request для отправки данных на сервер в виде POST.
    на сервер, это выглядит точно так же, как только представление нормальной формы

  • Использование Form.serialize, чтобы получить данные из формы и вставить его в теле запроса.
    Это точно такие же данные, которые будут посланы, если вы отправите форму обычно

1

Если вы не модифицируя браузер DOM, я не могу думать о причине, что вы хотели бы сделать это. (Но, не зная полностью, что вы пытаетесь сделать, я мог ошибаться в этом случае =)

Вы должны иметь возможность отправлять обратно данные из объектов с несколькими объектами (даже вложенные сложные объекты в вашей форме) всего за один POST ,

Скорее всего, код рельсов будет намного менее сложным, легче писать (и проще отлаживать!), Чем любой javascript, который вы придумали.

Если вам нужно обновить различные части страницы в зависимости от того, что выбрал пользователь, вы можете сделать несколько обновлений DOM через RJS в блоке рендеринга: обновление, поэтому это не должно быть проблемой.

У вас также будет (большое) преимущество только одного сервера в оба конца вместо нескольких поездок, которые вам понадобятся, используя несколько POSTS.

Смежные вопросы