2010-06-20 16 views
8

Tengo un Jstree que rellena una lista de elementos. Cuando hago clic en un nodo, un parcial se carga con ajax. Todo funciona bien hasta que incluya el script jquery.validate para validar mis formularios.JsTree entra en conflicto 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> 

Tan pronto como incluya este archivo, no se pueden seleccionar los nodos de árbol. Además, la función de arrastrar y soltar no funciona. No hay errores de javascript reportados en firebug. ¿Alguien sabe cómo resolver esos conflictos?

Gracias

+1

¿Qué versión del complemento de validación? 1.6 fubar'd la función de delegado. –

Respuesta

10

supongo que está utilizando la versión 1.6 de la biblioteca de validación, echar un vistazo a la fuente aquí: http://ajax.microsoft.com/ajax/jQuery.Validate/1.6/jQuery.Validate.js

Durante todo el camino en la parte inferior:

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

El problema es que 1.6 creó la función $(selector).delegate() anterior, que es no jQuery core .delegate(), el problema principal es un conflicto de nomenclatura y los argumentos/comportamiento aren ' t el mismo:

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

Salvo otros detalles como contexto, la primera cuestión es el primer y segundo argumentos son hacia atrás.

Incluyendo jQuery.validate 1.6 se rompe la función .delegate() en la cual jsTree confía. Si acaba de actualizar a version 1.7+ of the validation plugin, este problema debería desaparecer, llama a su función validateDelegate después de eso.

Cuestiones relacionadas