Как я могу создать цикл в событии onClick? - PullRequest
3 голосов
/ 14 сентября 2008

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

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

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

Ответы [ 3 ]

4 голосов
/ 14 сентября 2008

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

Я бы посоветовал вам сделать Proof of Concept, просто используя фиктивную HTML-страницу и javascript, а затем попытаться выяснить, как заставить его работать в RoR.

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

2 голосов
/ 15 сентября 2008

Вы должны вручную написать некоторый 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>

Примечание:

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

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

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

1 голос
/ 17 сентября 2008

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...