0

私はHAMLでこのフォームを持っています:

= form_for([:mobile,@disclosure], :html => {:id => "add_validation_to_ajax_form", :remote => true}) do |f|

しかし、add_validation_to_ajax_form 関数には次のようなパラメーターがあります。

function add_validation_to_ajax_form(form_selector){
    alert ("hello :)");
    add_custom_validation_methods();
    $(form_selector).submit(function(event) {
      force_ckeditor_to_update();
    }).validate({meta:"validate",onkeyup:false,validClass:"ok-input",
          errorPlacement: function(error, element) {

          }
      });
}

そして、JavaScript関数を呼び出す方法のHAML構文は初めてです。現在、フォームが送信されたとき、この関数は hello ポップアップを表示していません。なぜそれが機能しないのですか?

ありがとう!

4

1 に答える 1

1

これは、どこでも関数を呼び出していないためです。実行したい場合は、それを呼び出す必要があります。

application.jsこれをファイルに追加してみてください。

$(function() {
  add_validation_to_ajax_form('form#add_validation_to_ajax_form');
});

それはあなたの関数を呼び出します。ただし、必要な関数は次のようになります。

$(function() {
  $('form#add_validation_to_ajax_form').submit( function() {
    alert ("hello :)");
    add_custom_validation_methods();
    force_ckeditor_to_update();
    $(this).validate({
      meta:"validate",
      onkeyup:false,
      validClass:"ok-input",
      errorPlacement: function(error, element) {}
    });
  });
});

jQueryでの$(function(){ ... });呼び出しは、次のことを意味します。ページの読み込みが完了したときにこれを実行します。

この$(selector).submit( function(){...});関数は、ページ上でセレクターを見つけ、それに送信イベントハンドラーをアタッチすることを意味します。これにより、フォームが送信されたときに、この関数の内容が実行されます。

このようなものをHAMLに埋め込む必要がある場合は、次のように後ろ:javascriptにインデントすることでできます。

:javascript
  $(function(){ alert('The page is loaded!') });

ただし、HAMLは、関数が呼び出されるかどうかとは実際には何の関係もありません。HAMLはHTMLを作成します。HAMLが行う必要があるのは、どこかにjavascriptファイルを含めることだけです(javascript_include_tag)。Rails> 3.1.xの場合、ベストプラクティスは、レイアウトにapplication.jsファイルを含め、残りのJavaScriptをそれを介してロードすることです。

于 2012-04-23T15:26:53.223 に答える