2016-11-24 37 views
0

我正在尝试将自定义客户端验证添加到Spree的checkout/address页面中的输入字段。 所以,这里是我迄今所做的:将自定义cient-side表单验证添加到Spree前端

  1. 输入添加到窗体(这里使用Haml的& SimpleForm):

    = form.input :vat_number, label: Spree.t(:vat_number) 
    
  2. 里面我vendor/assets/javascripts/spree/frontend/checkout/address.js.coffee,加入jQuery的验证方法并插入规则到validate()电话:

    ($).validator.addMethod "vatNumber", (value, element) -> 
        return false 
    , "Something wrong!" 
    
    Spree.onAddress =() -> 
        if ($ '#checkout_form_address').is('*') 
    
        ($ '#checkout_form_address').validate({ 
        rules: { 
         order_bill_address_attributes_vat_number: { 
         vatNumber: true 
         } 
        } 
        }) 
    
        # ... rest of the file ... 
    

验证程序似乎没有在vat_number字段上运行,但其余表单验证正常。在javascript调试控制台中,如果我键入$.validator.methods,我看到新的vatNumber方法已添加,因此问题必须以我调用validate()的方式进行,或者与我使用SimpleForm这一事实有关。

我已经改变了代码周围的validate()调用此:

($ '#order_bill_address_attributes_vat_number').rules("add", {vatNumber: true}) 
($ '#checkout_form_address').validate() 

而且我得到了在javascript控制台窗口中出现以下错误:

TypeError: undefined is not an object (evaluating '$.data(element.form,"validator").settings') 

有没有人尝试这样做吗?

回答

0

我想出了问题所在。

显然,在address.js.coffee文件底部的Spree.onAddress调用后面添加vatNumber方法。

我感动addMethod调用不同的地方(在那里我知道它叫/代码之前运行address.js.coffee和突然的工作。

现在,我不知道这是一个CoffeeScript的事。莫非顺序代码转换后的代码更改为Javascript

相关问题