HAML - 如何使用选择器调用表单?

时间:2012-04-23 15:09:08

标签: javascript ruby-on-rails haml

我在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) {

          }
      });
}

我是HAML语法的新手,它应该如何调用JavaScript函数。现在提交表单时,此函数不显示hello弹出窗口。知道为什么它不起作用吗?

谢谢!

1 个答案:

答案 0 :(得分: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文件,并通过它来加载其余的javascripts。