2010-06-20 155 views
8

我有一個Jstree填充項目列表。當我點擊一個節點時,一個partial會被加載一個jax。一切正常,直到我包含jquery.validate腳本來驗證我的表單。JsTree與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> 

只要我包含此文件,樹節點不能被選中。拖放功能也不起作用。在螢火蟲中沒有報告javascript錯誤。任何人都知道如何解決這些衝突?

感謝

+1

哪個版本的驗證插件? 1.6 fubar'd委託功能。 – 2010-06-20 13:42:31

回答

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(),主要問題是命名衝突和參數/行爲aren' t是相同的:

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

除非其他細節,如背景下,第一個問題是第一和第二個參數是倒退。

包括jQuery.validate 1.6打破了jsTree依賴的.delegate()函數。如果你只是升級到version 1.7+ of the validation plugin,這個問題應該消失,之後它會調用它的函數validateDelegate