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 回答