Knockout没有绑定提交与JQuery1.10.2

时间:2013-10-18 05:43:56

标签: javascript jquery html knockout.js unobtrusive-validation

编辑: 这实际上是Knockout,JQuery 1.10.2并试图覆盖jquery.unobtrusivevalidation ErrorPlacement函数...停止表单元素上的提交绑定工作。

如果我使用JQuery 1.8.2运行相同的代码,那么只需将我的JQuery文件更改为1.10.2我的提交函数停止触发...有没有人看到类似的内容?

我将发布尽可能多的相关代码以防万一,但是主要的一点是,使用jquery 1.8.2并且没有任何其他更改jcery 1.10.2,commitForm与表单提交事件绑定得非常好不接触submitForm(使用断点和alert()语句进行测试)。 所有其他淘汰赛绑定似乎仍然有效。

请帮忙。感谢。

<html>
<head>
<script src="/Content/Scripts/jquery-1.10.2.js"></script>
<script src="/Content/Scripts/jquery-ui/jquery-ui.js"></script>
<script src="/Content/Scripts/jquery-ui-timepicker-addon.js"></script>
<script src="/Content/Scripts/knockout-2.3.0.js"></script>
<script src="/Content/Scripts/knockout-helpers.js"></script>
<script src="/Content/Scripts/knockout.mapping-latest.js"></script>
<script src="/Content/Scripts/underscore.js"></script>
<script src="/Content/Scripts/date.js"></script>
<script src="/Content/Scripts/global.js"></script>
<script src="/Content/Scripts/jquery.blockUI.js"></script>
<script src="/Content/Scripts/jquery.dirtyform.js"></script>
<script src="/Content/Scripts/bootstrap/bootstrap.js"></script>
<script src="/Content/Scripts/sessionTimer.js"></script>
<script src="/Content/Scripts/jquery.livequery.js"></script>



<script src="/Content/Scripts/Ecdm/myCode.js"></script>




</head>


<form action="/Apply" data-bind="submit: submitForm" id="myApplicationForm"         method="post">

<!-- html form stuff -->

</form>
<script>

    var view; 

        $(function() {


        view = new ModelView({
                formSelector: '#myForm',
    });

  // Base JS model
        var model =
            {                
                someProperty: '@Model.SomeProperty',
};


view.bind(model);


});


</script>

</html>

myCode.js:

function ModelView(params) {

    var self = this;

  // Default parameters
    var args = $.extend({
    formSelector: 'form'    }, params);

   this.bind = function (model) {
  // Apply KO bindings
    ko.applyBindings(self);
    };


    this.submitForm = function () {
    var form = $(args.formSelector);
    form.validate();
    if (form.valid()) {
        var referenceNumber = $('#ReferenceNumber');

        if (a==b) {

            showConfirmation();

            return false;
        }

        g_showWait("Please wait...");
        return true;
    }

    return false;
}

}

1 个答案:

答案 0 :(得分:0)

我通过使用验证声明符号解决了它,而不是直接设置验证器设置,但我不知道为什么。如果有人能解释我会很感激(我厌倦了看:)) errorPlacement已成功覆盖并在两种情况下都有效。提交淘汰赛绑定只是没有用。

而不是像这样覆盖errorPlacement函数

$("form").each(function() {        
        var validator = $(this).data('validator');
        if (typeof validator != 'undefined') {
            validator.settings.errorPlacement = $.proxy(function(error, inputElement) {
                //
                // do stuff with the error object
                //
             }, $(this));
         }
 });

我把它改成了这只是尝试了一切并且有效:

$("form").each(function () {
    var validator = $(this).data('validator');
    if (typeof validator != 'undefined') {
        $(this).validate({
            errorPlacement: $.proxy(function (error, inputElement) {
                //
                // do stuff with the error object
                //
             }, $(this));
         }
 });