2011-11-24 73 views
1

注意到submitHandler的代码正在几个地方使用,并试图重构它。如何存储从闭包函数返回的变量?

var validator = $("#form_id").validate({ 
      errorClass: "ui-state-error", 
      submitHandler: function(form) { 
       jQuery(form).ajaxSubmit({ 
        dataType: 'json', 
        success: function(entity) { 
         //dostuff 
        }, 
        error: function(errors) { 
          validator.showErrors(errors); 
        } 
       }); 
      } 
     }); 

我拿了上面的代码,并提取了像这样的函数的submithandler;

$("#generated_form_id").validate({ 
       errorClass: "ui-state-error", 
       submitHandler: bindSubmitHandler(formId) 
       } 
      }); 

    function bindSubmitHandler(formId){ 
      return function(form) { 
        jQuery(form).ajaxSubmit({ 
         dataType: 'json', 
         success: function(object) { 
          //do stuff 
          }); 
         }, 
         error: function(errors) { 
           validator.showErrors(errors); //throws an exception 
         } 
        }); 
       } 
     } 

此代码将引发异常,因为验证器对象未定义。

我自己的推理这可能是错误的如下:我无法存储变量,因为窗体是动态创建的。一个页面可以使用相同的bindSubmitHandler函数创建其中的10个表单。 我想过通过表单获取验证器的解决方案,但在验证器API中找不到任何此类方法。如果有这样的方法,我可以写一些像$('#formid').getValidator().showErrors(errors);

有没有人有解决这个问题的想法?

回答

1

validate()返回验证器。

将验证程序附加到表单中,使用.data(),检索它bindSubmitHandler

难道你不想通过success也可能error处理程序,但?

+0

啊,很好的解决方案!是的,我会问。补充一点,在这一点上并不需要。 –