update once behaviors attached javascript jquery drupal drupal-7

javascript - once - Usando JQuery en Drupal 7



libraries drupal 7 (4)

Estoy escribiendo mi propio módulo Drupal 7, y me gusta usar JQuery en él.

$(''#field'').toggle();

Pero estoy obteniendo este error:

TypeError: Property ''$'' of object [object DOMWindow] is not a function

Parece que JQuery no está cargado. De lo contrario $ debe ser definido.

Aunque en realidad lo incluyo en el encabezado:

<script type="text/javascript" src="http://rockfinder.de/misc/jquery.js?v=1.4.4"></script>

¿Debo hacer algo más para activar JQuery en Drupal? ¿Drupal sobrescribe $?

Ese es el sitio web: http://rockfinder.orgapage.de


"$ no es una función" es un error muy común que puede enfrentar al trabajar con jQuery. Puedes probar cualquier respuesta dada a continuación:

(function($){ //your can write your code here with $ prefix })(jQuery);

O

jQuery(document).ready(function($){ //Write your code here });

Básicamente, esto permitirá que nuestro código se ejecute y use el acceso directo $ para JQuery.


Lo más probable es que su script no se inicialice de esta manera, tendrá que usar Drupal.behaviors.YOURTHEMENAME

(function ($) { Drupal.behaviors.YOURTHEMENAME = { attach: function(context, settings) { /*Add your js code here*/ alert(''Code''); } }; })(jQuery);


Según Firebug, su archivo jQuery se está cargando:

Pero el $ está siendo sobreescrito por otra cosa:

Lo que debe hacer es encapsular el uso de la variable $ con una función que se invoca utilizando el objeto jQuery ya que es el primer argumento real:

(function ($) { // in this function, you can use the $ which refers to the jQuery object }(jQuery));


De la guía de actualización de Drupal 7:

Javascript debe ser compatible con otras bibliotecas que jQuery agregando un pequeño contenedor alrededor de su código existente:

(function ($) { // Original JavaScript code. })(jQuery);

$ Global ya no se referirá al objeto jquery. Sin embargo, con esta construcción, la variable local $ se referirá a jquery, permitiendo que su código acceda jQuery a $ de todos modos, mientras que el código no entrará en conflicto con otras bibliotecas que usan $ global.

También puede usar la variable ''jQuery'' en lugar de la variable $ en su código.