Javascript 远程:true表单避免js字段验证

Javascript 远程:true表单避免js字段验证,javascript,ruby-on-rails,validation,client-side-validation,Javascript,Ruby On Rails,Validation,Client Side Validation,这是我的表格: <%= form_for [@company,@company_branch], :html => { :onsubmit => "return validateName();" }, remote: true do |f| %> <%= f.text_field :name %> ... 我和同样的人发生了冲突。目前我还没有找到解释,但根据我的实验,表单的远程do post独立于onsubmit函数的返回值。 我在服务器端使

这是我的表格:

<%= form_for [@company,@company_branch], :html => { :onsubmit => "return validateName();" }, remote: true do |f| %>
    <%= f.text_field :name %>
    ...

我和同样的人发生了冲突。目前我还没有找到解释,但根据我的实验,表单的远程do post独立于onsubmit函数的返回值。 我在服务器端使用了表单验证,并返回了一个js以处理验证错误

更新。 在Rails 2中?并且至少3,form_form,:remote=>true重写:onsubmit=>'func;'方法进行实际表单提交。如果您想在表单提交之前或提交期间或之后将其绑定到表单上!,使用jQuery.bind绑定表单,然后观察AJAX回调函数以执行所需操作

<script type="text/javascript>
  function get_address_information() {
    // check jquery for all the possible callbacks. there is also success and error. compete get calls after both success and error
    var pars = 'param1=x&amp;param2=y&amp;param3=z';
    $.ajax({ type: "POST",
      url: "/get_invite_address",
      data: pars, dataType: 'script',
      beforeSend: function() {
        // do your before send checking here
      },
      complete: function(data, status) {
        // do some post processing ehre
      }
    });
  }
</script>"

中,变体工作解决方案是将验证绑定到ajax:beforeSend事件,beforeOneClick函数返回false或true:

$('form')
 .bind('ajax:success', function(evt, data, status, xhr) {
  console.log('success: ' + xhr + '/' + status + '/' + data);
 })
 .bind("ajax:beforeSend", function(evt, xhr, settings){
  return beforeOneClick();
 })
 .bind('ajax:complete', function(evt, xhr, status){
  console.log('complete');
 })
 .bind("ajax:error", function(evt, xhr, status, error){
  console.log('error:' + xhr + '/' + status + '/' + error);
 });
$('form')
 .bind('ajax:success', function(evt, data, status, xhr) {
  console.log('success: ' + xhr + '/' + status + '/' + data);
 })
 .bind("ajax:beforeSend", function(evt, xhr, settings){
  return beforeOneClick();
 })
 .bind('ajax:complete', function(evt, xhr, status){
  console.log('complete');
 })
 .bind("ajax:error", function(evt, xhr, status, error){
  console.log('error:' + xhr + '/' + status + '/' + error);
 });