JsTree与jquery.validate冲突

mad*_*kay 8 jquery jquery-validate jstree

我有一个Jstree填充项目列表.当我单击一个节点时,部分加载了ajax.一切正常,直到我包含jquery.validate脚本来验证我的表单.

<script src="/scripts/jquery.validate.js" type="text/javascript"></script>
<script src="/scripts/MicrosoftMvcJQueryValidation.js" type="text/javascript"></script>
<script src="/areas/manager/scripts/jquery.jstree.min.js" type="text/javascript"></script>
<script src="/areas/manager/scripts/jquery.hotkeys.js" type="text/javascript"></script>
<script src="/areas/manager/scripts/admin-panel.js" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)

只要我包含此文件,就无法选择树节点.拖放功能也不起作用.firebug中没有报告javascript错误.任何人都知道如何解决这些冲突?

谢谢

Nic*_*ver 10

我猜你正在使用验证库的1.6版本,请看一下这里的源代码:http: //ajax.microsoft.com/ajax/jQuery.Validate/1.6/jQuery.Validate.js

一直到底:

$.extend($.fn, {
    delegate: function(type, delegate, handler) {
        return this.bind(type, function(event) {
            var target = $(event.target);
            if (target.is(delegate)) {
                return handler.apply(target, arguments);
            }
        });
    },
    triggerEvent: function(type, target) {
        return this.triggerHandler(type, [$.event.fix({ type: type, target: target })]);
    }
})
Run Code Online (Sandbox Code Playgroud)

问题是1.6创建了$(selector).delegate()上面的函数,这不是 jQuery核心.delegate(),主要问题是命名冲突,参数/行为不一样:

  • jQuery.validate: .delegate(type, delegate, handler)
  • jQuery核心: .delegate( selector, eventType, handler )

除了上下文之外的其他细节,第一个问题是第一个和第二个参数是向后的.

包括jQuery.validate 1.6会破坏.delegate()jsTree所依赖的功能.如果你只是升级到1.7+版本的验证插件,这个问题就会消失,之后会调用它的功能validateDelegate.