我正在尝试向Spree的checkout/address
页面中的输入字段添加自定义客户端验证。
所以,这是我到目前为止所做的:
将输入添加到表单(此处使用Haml& SimpleForm):
= form.input :vat_number, label: Spree.t(:vat_number)
在我的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 :(得分:0)
我弄清楚问题是什么。
显然,在vatNumber
文件底部Spree.onAddress
调用后添加了address.js.coffee
方法。
我将addMethod
调用移到了另一个地方(我知道它在address.js.coffee
中的代码之前被调用/运行,它突然起作用了。
现在,我想知道这是不是CoffeeScript
。代码转换为Javascript
后,代码的顺序是否会发生变化?