2010-06-20 23 views
8

Ho un Jstree che compila un elenco di elementi. Quando clicco su un nodo, un partial viene caricato con ajax. Tutto funziona bene finché non includo lo script jquery.validate per convalidare i miei moduli.JsTree è in conflitto con 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> 

Non appena si include questo file, i nodi dell'albero non possono essere selezionati. Anche la funzionalità di trascinamento della selezione non funziona. Non ci sono errori javascript segnalati in firebug. Qualcuno sa come risolvere tali conflitti?

Grazie

+1

Quale versione del plug-in di convalida? 1.6 ha decantato la funzione dei delegati. –

risposta

10

Sto indovinando che si sta utilizzando la versione 1.6 della libreria di convalida, dare un'occhiata alla fonte qui: http://ajax.microsoft.com/ajax/jQuery.Validate/1.6/jQuery.Validate.js

Per tutto il tragitto in fondo:

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

Il problema è che 1.6 ha creato la funzione $(selector).delegate() sopra, che è non jQuery core .delegate(), il problema principale è un conflitto di denominazione e gli argomenti/comportamento aren ' t stesso:

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

Blocco altri dettagli come contesto, il primo problema è il primo e secondo argomenti sono all'indietro.

L'inclusione di jQuery.Validate 1.6 interrompe la funzione .delegate() su cui jsTree si basa. Se esegui l'upgrade a version 1.7+ of the validation plugin, questo problema dovrebbe andare via, dopodiché chiama la sua funzione validateDelegate.