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 错误。有谁知道如何解决此类冲突?

谢谢

4

1 回答 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 core .delegate(),主要问题是命名冲突并且参数/行为不一样:

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

除非上下文等其他细节,第一个问题是第一个和第二个参数是倒退的。

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

于 2010-06-20T13:50:58.193 回答