javascript - knockout validation : how to validate the fields on button click, 不在输入更改时

标签 javascript validation knockout.js knockout-validation

我正在使用以下 knockout validation 插件:https://github.com/Knockout-Contrib/Knockout-Validation

我想在单击“提交”按钮时验证我的字段,而不是每次更改输入值时。我该怎么做?

Javascript:

ko.validation.init({
    insertMessages:false,
    messagesOnModified:false,
    decorateElement: true,
    errorElementClass: 'wrong-field'
}, true);

var viewModel = {
    firstName: ko.observable().extend({minLength: 2, maxLength: 10}),
    lastName: ko.observable().extend({required: true}),
    age: ko.observable().extend({min: 1, max: 100}),
    submit: function() {
        if (viewModel.errors().length === 0) {
            alert('Thank you.');
        }
        else {
            alert('Please check your submission.');
            viewModel.errors.showAllMessages();
        }
    },
};

viewModel.errors = ko.validation.group(viewModel);

ko.applyBindings(viewModel);

HTML:

<fieldset>    
    <div class="row" data-bind="validationElement: firstName">
        <label>First name:</label>
        <input type="text" data-bind="textInput: firstName"/>
    </div>

    <div class="row" data-bind="validationElement: lastName">
        <label>Last name:</label>
        <input data-bind="value: lastName"/>
    </div>

    <div class="row">
        <div class="row">
            <label>Age:</label>
            <input data-bind="value: age" required="required"/>
        </div>
    </div>
</fieldset>

<fieldset>
    <button type="button" data-bind='click: submit'>Submit</button>
    &nbsp;
</fieldset>

这是我的 jsfiddle:http://jsfiddle.net/xristo91/KHFn8/6464/

最佳答案

嗯,是的,当可观察值发生变化时,验证器确实会被触发。但是......你可以用验证器的 onlyIf 选项来欺骗他们。 我做了一个Fiddler sample它是如何工作的。

这里的问题更多的是......用户第一次点击后你想做什么......

基本上,该示例为所有验证器设置了一个 onlyIf 条件,而 validateNow 可观察值决定验证器何时应评估...基本上如您所愿...在提交方法中。

self.validateNow = ko.observable(false);

onlyIf 在所有验证器上被评估:

self.firstName = ko.observable().extend({
minLength: {
  message:"minlength",
  params: 2,
  onlyIf: function() {
    return self.validateNow();
  }
},

并且 validateNow 仅在提交时设置

self.submit = function() {
self.validateNow(true);

...我还重新设置了一些数据绑定(bind),因为您的示例只将红色框放在输入的周围。

我习惯于使用构造函数创建我的闭包..所以示例与您的“架构”不同,但我认为您会理解它

关于javascript - knockout validation : how to validate the fields on button click, 不在输入更改时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36084721/

相关文章:

knockout.js - KnockoutJS 在使用自定义选项时遇到问题Text : on ko. mapping.fromJS 数据

jquery - 在 knockout 数组中创建新对象时正确使用 JQuery 异步调用?

javascript - ReactJS this.state 为 null

java - JAXP:如何根据 XML 模式验证 org.w3c.dom.Document

javascript - CSS margin-top 和 top 没有绑定(bind)

javascript - jQuery 验证正在重复 else 语句 |验证完成后,将不会打印值

asp.net - 如何在 ASP.NET MVC 自定义验证中指定错误成员键?

javascript - 如何在Firefox中通过knockout回调函数传递 'event'参数?

javascript - wordpress 函数没有被执行

javascript - 当在Electron中使用时,的page.evaluate()总是返回空对象