2

この投稿をフォローしようとしていますJavascriptとPrototypeで送信ボタンを目立たないように無効にするにはどうすればよいですか?しかし、私はそれを機能させることができません。フォームはRJS関数をトリガーするので、ヘルパーのonclickイベントをそのまま維持する必要があります。RJSは、2つの新しいテキストとともに、同じフォームを返す/再読み込みします。私は本当に混乱しています。フォームのRailsコードは次のとおりです。

.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'));"
4

1 に答える 1

0

プロトタイプを使用してそれを行うことができる1つの方法は次のとおりです。

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

これにより、DOMが読み込まれるときに、CSSクラス(つまり送信ボタン)inputを持つすべての要素にonclickイベントハンドラーが追加されます。compareonclickイベントハンドラーは、クリックされたときに各ボタンを無効にします。この方法でPrototypeを使用してイベントハンドラーを追加しても、要素の既存のイベントハンドラーは置き換えられないことに注意してください。

于 2010-03-20T16:34:57.010 に答える