1

明らかなことだと確信しているので、これを尋ねることさえ嫌いですが、答えを探すのに何時間も費やしましたが、見つけることができません。

「slideup」関数を使用する単純な javascript (jquery) コードがあります。選択に基づいてフィールドを表示または非表示にするために、フォームのパーシャルで使用しています。コードをフォームに直接入れると、完全に機能します。assets/javascript フォルダーに配置すると、application.js ファイルに含まれますが、機能しません。

テストのために、ロードされているかどうかを確認するためだけに JavaScript アラートも入れましたが、アラートが発生します。一生解けません。

app/assets/javascript/form.js にある JavaScript は次のとおりです。

$('#Postponement').change(function () {
    if ($("#NewWeddingDate").is(":hidden")) {
      $("#NewWeddingDate").show("slow");
    } else {
      $("#NewWeddingDate").slideUp();
    }
  })


$(function(){
  alert('got to application.js!');
})

これは関連するフォーム コードです (私は Formtastic を使用しています)。

<div id='Postponement' >

    <%= f.input :Postponement, :label => "Will the wedding be postponed?", :input_html => { :id => 'Postponement' }, :as => :select, :include_blank => false, :collection => ['Yes', 'No'], :selected => 'Yes' %> <br />

    </div>

    <div id = 'NewWeddingDate' >

    <%= f.input :NewWeddingDate, :label => "The new wedding date is:", :input_html => { :id => 'NewWeddingDate' }, :as => :date_select, :start_month => Time.now.month, :start_year => Time.now.year, :end_year => Time.now.year + 10, :order => [:month, :year] %><br />

    </div>

私のapplication.html.erbにはが含まれて<%= javascript_include_tag "application" %>おり、そのjavascriptコードを_form.html.erbファイルに直接追加すると、正常に動作します。私は間違いなくこのような初心者なので、それは明らかなことだと確信しています. コードを _form.html.erb に残すだけで済んだのですが、正しい (Rails) 方法でやろうとしています。ありとあらゆる助けをいただければ幸いです。

4

1 に答える 1

0

ドキュメントがロードされた後にコードを実行してみてください。現時点では、部分的なフォームに配置している場合を除いて、#Postponement が存在する直前に実行されている可能性があります。例えば:

$(function() {
    $('#Postponement').change(function () {
        if ($("#NewWeddingDate").is(":hidden")) {
          $("#NewWeddingDate").show("slow");
        } else {
          $("#NewWeddingDate").slideUp();
        }
    })
});

関数を 内に配置すると、DOM の準備が完全に整った後に$()確実に実行されます。

于 2013-03-28T03:22:14.987 に答える