2013-11-21 101 views
0

我想用Knockout和jQuery验证使用绑定处理程序,但是当我提交表单时,页面重新加载,不验证并且不会在我的视图模型上调用该方法。Knockout jQuery验证绑定处理程序

有人能告诉我我错过了什么吗?

这里是我结合

ko.bindingHandlers.validateEmailForm = { 
     update: function(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {  
      $(element).validate({ 
       errorLabelContainer: $("#updateEmailFormAlert"), 
       wrapper: 'li', 
       rules: { 
        email: { 
         required: true,       
         email: true 
        }, 
        emailConfirm: {             
         email: true, 
         equalTo: "#email",      
        } 
       }, 
       messages: { 
        email: { 
         required: "Email is required", 
         email: "Please enter a valid email address" 
        }, 
        emailConfirm: { 
         required: "Confirm Email is required", 
         email: "Please enter a valid confirm email address", 
         equalTo: "Confirm Email must match Email" 
        } 
       }, 
       submitHandler: function() { 
        viewModel.updateUserEmail(); 
       } 
      }); 
     }  
    }; 
+0

我不熟悉淘汰赛; 'update:'应该是什么?如果它对你有帮助,请记住'.validate()'是插件的_initialization_方法,并在DOM就绪事件中被调用_once_。此时验证是由各种鼠标事件自动触发的。 – Sparky

+0

更新用于在Knockout完成绑定之后应用jquery插件或添加到元素。该绑定允许我将一个简单的属性添加到我的表单data-bind =“validateEmailForm:{}”中,一旦绑定完成,它将自动运行更新中的代码。 –

回答

0

行,所以我不得不做的是创造我的视图模型实例时创建一个变量,这样我就可以参考我的视图模型内的功能。

var userViewModel = new UsersViewModel(); 
ko.applyBindings(userViewModel); 

然后在我的submitHandler

// activate the jQuery Validate on the form 
    ko.bindingHandlers.validateEmailForm = { 
     update: function(element, valueAccessor, allBindingsAccessor, data, bindingContext) {  
      $(element).validate({ 
       errorLabelContainer: $("#updateEmailFormAlert"), 
       wrapper: 'li', 
       rules: { 
        email: { 
         required: true,       
         email: true 
        }, 
        emailConfirm: {             
         email: true, 
         equalTo: "#email",      
        } 
       }, 
       messages: { 
        email: { 
         required: "Email is required", 
         email: "Please enter a valid email address" 
        }, 
        emailConfirm: { 
         required: "Confirm Email is required", 
         email: "Please enter a valid confirm email address", 
         equalTo: "Confirm Email must match Email" 
        } 
       }, 
       submitHandler: function() { 
        userViewModel.updateUserEmail(data); 
        return false; 
       } 
      }); 
     }  
    }; 
相关问题