我有一个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.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,handler)
> jQuery核心:.delegate(selector,eventType,handler)
除了上下文之外的其他细节,第一个问题是第一个和第二个参数是倒退的.
包括jQuery.validate 1.6打破了jsTree所依赖的.delegate()
函数.如果您只是升级到version 1.7+ of the validation plugin,此问题应该消失,之后调用其功能validateDelegate
.