我們在做前端表單提交時,經常會遇到要對表單中的數據進行校驗的問題。如果用戶提交的數據不合法,例如格式不正確、非數字類型、超過最大長度、是否必填項、最大值和最小值等等,我們需要在相應的地方給出提示信息。如果用戶修正了數據,我們還要將提示信息隱藏起來。
有一些現成的插件可以讓你非常方便地實現這一功能,如果你使用的是knockout框架,那么你可以借助于Knockout-Validation這一插件。使用起來很簡單,例如我下面的這一段代碼:
ko.validation.locale('zh-CN');ko.validation.rules['money'] = {  validator: function (val) {    if (val === '') return true;    return /^/d+(/./d{1,2})?$/.test(val);  },  message: '輸入的金額不正確'};ko.validation.rules['moneyNoZero'] = {  validator: function (val) {    if (val === '') return true;    return isNaN(val) || val != 0;  },  message: '輸入的金額不能為0'};ko.validation.registerExtenders();var model = {  MSRP: ko.observable(0),  price: ko.observable().extend({ required: true, number: true, min: 10000, money: true, moneyNoZero: true }),  licence_service_fee: ko.observable().extend({ required: true, money: true }),  purchase_tax: ko.observable().extend({ required: true, money: true }),  vehicle_tax: ko.observable().extend({ required: true, money: true }),  insurance: ko.observable().extend({ required: true, money: true }),  commercial_insurance: ko.observable().extend({ required: true, money: true }),  mortgage: ko.observable(''),  interest_discount: ko.observable(''),  allowance: ko.observable().extend({ money: true }),  special_spec_fee_explain: ko.observable(''),  has_extra_fee: ko.observable(false),  is_new_energy: ko.observable(false)};model.extra_fee_explain = ko.observable().extend({  required: {    onlyIf: function () {      return model.has_extra_fee() === true;    }  }});model.extra_fee = ko.observable().extend({  required: {    onlyIf: function () {      return model.has_extra_fee() === true;    }  },  money: {    onlyIf: function () {      return model.has_extra_fee() === true;    }  }});model.new_energy_allowance_explain = ko.observable().extend({  required: {    onlyIf: function () {      return model.is_new_energy() === true;    }  }});model.total_price = ko.computed(function () {  var _total = Number(model.price()) + Number(model.licence_service_fee()) +    Number(model.purchase_tax()) + Number(model.vehicle_tax()) +    Number(model.insurance()) + Number(model.commercial_insurance());  if (model.has_extra_fee()) {    _total += Number(model.extra_fee());  }  if (model.is_new_energy()) {    _total -= Number(model.new_energy_allowance());  }  return isNaN(_total) ? '0' : _total.toFixed(2).replace(/(/.0*$)|(0*$)/, '');});model.errors = ko.validation.group(model);ko.applyBindings(model);更多使用方法可以查看github上的說明文檔和示例。
新聞熱點
疑難解答
圖片精選