我正在尝试使用jquery验证设置验证,并且我已经从服务器返回的viewmodel映射到客户端,并成功地将knockout js绑定到一些数据。
我包含一个调用验证,但验证从不触发,但是如果我在输入框中放置一个类,然后调用有效,则按预期触发。
有任何想法吗?
<script type="text/javascript"> var viewmodel; $(document).ready(function () { $.ajax({ url: 'Home/GetUserData',type: 'post',success: function (data) { viewmodel = ko.mapping.fromJS(data); viewmodel.save = function () { sendToServer(); }; ko.applyBindings(viewmodel); main(); } }); }); function main() { $("form").validate({ rules: { birthPlace: { required: true,minlength: 2 } } }); } function sendToServer() { alert($("form").valid()); } </script> } <h2>@ViewBag.Message</h2> <form id="nameSubmit" action=""> <div> The name is: <span id="test" data-bind="text: Name"></span> </div> <div> He's <span id="age" data-bind="text: Age"></span> </div> <div> He's from <input type="text" id="birthPlace" name="birthPlace"/> </div> <div> <button data-bind="click: save">Click Me</button> </div> </form>
解决方法
默认情况下,jQuery Validate是在提交时的验证。因此,如果敲除正在中断,即通过实际上不触发onSubmit事件,那将会这样做。您最好的选择可能是在您在sendToServer函数中进行规划时,手动从您的敲门提交事件触发验证:
if (!$('form').valid()){ $('form').showErrors(); return false; } //otherwise,get on with whatever knockout needs to do ... return true;