2016-06-22 3 views
1

Ich habe eine Drupal 7-Website (mit jquery-update installiert, FWIW). jQuery wird anscheinend vom jQuery-Objekt anstelle von $ referenziert. Dies ist bei https://www.drupal.org/node/171213 gut dokumentiert.

Ich versuche, ein bereitgestelltes Skript zu verwenden, um bestimmte Anforderungen zu erfüllen.

Das Skript zur Verfügung stellt das $ -Objekt, und so bekomme ich "TyperError: $ ist keine Funktion".

Die HTML- und Script zur Verfügung gestellt sieht aus wie:

<div id="grid"><span class="grid-load-error">There was an error loading the interactive grid.</span></div> 
<script type="text/javascript" src="//site.com/tool.js"> 
</script> 

Auf Seite zu laden, erhalte ich die Meldung Typeerror.

Ich habe versucht, das Laden des Skripts in einem Verschluss zu wickeln:

<div id="grid"><span class="grid-load-error">There was an error loading the interactive grid.</span></div> 
<script type="text/javascript"> 
    (function($) { 
     $(function() { 
      // console.log($('#grid').html()); 
      $.getScript("//site.com/tool.js"); 
     }); 
    })(jQuery); 
</script> 

Ich weiß, dass $ innerhalb des Verschlusses arbeitet - die kommentierte console.log() erzeugt die korrekte Ausgabe, wenn unkommentiert.

Ich nahm an, dass $ .getScript() würde fehlschlagen, wie sagt mir, dass das Skript im globalen Kontext ausgeführt wird (was, wenn ich Schließungen richtig verstehen $ ist nicht global hier).

Gibt es eine Möglichkeit, dass ich dieses Skript aus der Quelle aufnehmen kann, oder sollte ich es bearbeiten, um "$" durch "jQuery" zu ersetzen?

Antwort

2

$.getScript ist eine Abkürzung für $.ajax() und dann schön jquery wird nur das Skript zu <head> für Sie anhängt. In Ihrem Fall wird dies jedoch nicht funktionieren, wie Sie bereits herausgefunden haben. So erstellen Sie einfach Ihr eigenes $.getScript

einfach das Skript holen, und dann fügen Sie es zu Ihrem eigenen <script> Tag und wickeln Sie den Inhalt des abgerufenen Skript in einem iffe

<script id="myLib"></script> 
<script> 
    (function ($){ 
     //$.getScript('./tool.js'); 
     $.ajax({ 
      url: './tool.js', 
      dataType: "text", //force script response to be treated as plain text 
      success: function(data) { 
       var myLib = '(function ($){' + data + '}(jQuery));'; 
       $('#myLib').html(myLib); 
      } 
     }); 
    }(jQuery)); 
</script> 

Ihr Skript soll jetzt funktionieren. Stellen Sie sicher, dass

<script id="myLib"></script> 

Kommt, nachdem jQuery auf der Seite definiert ist.

1

Sie benötigen externes Skript wickeln mit:

(function($) { 

})(jQuery); 
Verwandte Themen