JsTree与jquery.validate冲突

8

我有一个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>

当我包含这个文件时,树节点就无法被选择。拖放功能也不能使用。在Firebug中没有报告任何JavaScript错误。有人知道如何解决这类冲突吗?

谢谢。


1
验证插件的哪个版本?1.6破坏了委托函数。 - Nick Craver
1个回答

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 })]);
    }
})

问题在于1.6版本创建了上面的$(selector).delegate()函数,这不是jQuery核心.delegate(),主要问题是命名冲突和参数/行为不同:
  • jQuery.validate:.delegate(type, delegate, handler)
  • jQuery核心:.delegate(selector, eventType, handler)
除了上下文等其他细节外,第一个问题是第一和第二个参数颠倒了。
包含jQuery.validate 1.6会破坏jsTree依赖的.delegate()函数。如果升级到验证插件的1.7+版本,这个问题应该就解决了,它在此之后调用其函数validateDelegate

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接