Как отключить Rails кнопки отправки рядом с помощниками Prototype и RJS? - PullRequest
2 голосов
/ 20 марта 2010

Я пытаюсь подписаться на этот пост Как ненавязчиво отключить кнопки отправки с Javascript и Prototype? , но я не могу заставить его работать. Форма запускает функцию RJS, поэтому мне нужно сохранить нетронутыми события помощников. RJS возвращает / перезагружает те же формы вместе с двумя новыми текстами. Я действительно смущен. Вот мой код рельсов для форм:

.span-20#comparison
  / new comparison . . .
  / voting forms (also reloaded)
  .span-4.prepend-3.append-6
    - form_remote_tag :action => url_for(:controller => :comparisons), :method => :post do
      = hidden_field_tag :poem1_id, poems[:a].id
      = hidden_field_tag :poem2_id, poems[:b].id
      = hidden_field_tag :response, 1
      = submit_tag "Vote for me", :disabled => false, :disable_with => 'Vote for me', :class => "compare"    

  .span-4.append-3.last
    - form_remote_tag :action => url_for(:controller => :comparisons), :method => :post do
      = hidden_field_tag :poem1_id, poems[:a].id
      = hidden_field_tag :poem2_id, poems[:b].id
      = hidden_field_tag :response, 2
      = submit_tag "Vote for me", :disable_with => 'Vote for me', :class => "compare"

  .span-4.prepend-8.append-8.prepend-top.last
    - form_remote_tag :action => url_for(:controller => :comparisons), :method => :post do
      = hidden_field_tag :poem1_id, poems[:a].id
      = hidden_field_tag :poem2_id, poems[:b].id
      = hidden_field_tag :response, 'draw'
      = submit_tag "Declare Draw", :disable_with => 'Declare Draw', :class => "compare"

RJS

page.replace_html :comparison, :partial => 'poems', :object => @poems
page.insert_html :top, :previous, :partial => 'comparison', :object => @comparison
page << "Effect.ScrollTo($('top'));"

1 Ответ

0 голосов
/ 20 марта 2010

Вот один из способов сделать это с помощью Prototype:

<script type="text/javascript">
  document.observe("dom:loaded" function() {
    $$("input .compare").each(function(submit) {
      submit.observe("click", function() {
        submit = true;
      });
    });
  });
</script>

Это добавляет обработчик события onclick к каждому элементу input с классом compare CSS (т. Е. Ваши кнопки отправки) при загрузке DOM. Обработчики событий onclick отключают каждую кнопку при нажатии. Обратите внимание, что добавление обработчиков событий с использованием Prototype таким способом не заменяет никаких существующих обработчиков событий в элементах.

...