2016-05-10 9 views
-4

Sie sind gute Praktiken setzen jQuery den unteren Rand der Seite, vor der </ body>, aber wenn Sie eine PHP in der Mitte der Seite haben und in dieser include habe ich das jQuery-Code wie folgt aus:

[code of index.php] 
[include] 
<script> 
$(function() { 
     <?php 
     echo "$('#".$_SESSION['user']['flags']."').attr('selected', true);"; 
     ?> 
    }); 
</script> 
[/include] 
[code of index.php including jQuery.js here before </body>] 

Firebug sagt mir, dass $ is not defined. Ich habe "Defer" verwendet, aber es funktioniert auch nicht. Ich habe Stackoverflow durchsucht, weiß aber nicht, wie ich es beheben kann.

Hier mein Code:

index.php

<!doctype html> 
    <html class="no-js" lang="es"> 
    <head> 
    <meta charset="utf-8"> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 
    <meta name="robots" content="noodp, noydir"> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    </head> 
    <body id="body"> 
    <?php 
     include './step1.php'; 
    ?> 
    <!-- jQuery --> 
     <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"></script> 
<script type="text/javascript" src="js/main.js"></script> 
</body> 
</html> 

step1.php

<script> 
$(function() { 
     <?php 
     echo "$('#".$_SESSION['user']['flags']."').attr('selected', true);"; 
     ?> 
    }); 
</script> 
+1

1. umfassen jQuery-Bibliothek dann Code jQuery. – nada

+0

Verschieben Sie das jQuery-Include an den Anfang des Textkörpers. Oder irgendwo vor der Stelle, an der Sie versuchen, es zu benutzen. – nnnnnn

+0

also sollten Sie nicht einfach ** JQuery ** in den ** Kopf ** jetzt einschließen? es geht um Anwendungsfälle. Gute Praktiken können nicht immer verwendet werden. –

Antwort

0

Wenn Sie den „$ (function() {“ ersetzen Abschnitt mit window.onload Sie sicherstellen können, dass alle Skriptdateien, bevor geladen wurden Ihre Funktion zu schießen.

jedoch darüber im Klaren sein, dass diese Brände viel später wird jQuerys Methode document.ready. jQuery ausgelöst, wenn dom geladen wird, während window.onload wartet, bis das gesamte Dokument und seine Skripte geladen sind.

Weitere Informationen und Beispiel hier: https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onload

+0

Ja, funktioniert perfekt. –

0

Antwort auf das Problem: Sie haben den step1.php enthalten vor jQuery einschließlich .js. Deshalb wird es nicht funktionieren. Schließen Sie jQuery.js ein, bevor Sie step1.php hinzufügen.

Antwort in Bezug auf jQuery in Ende HTML Körper: Ja, es ist eine gute Praxis, aber das scheint mir als Mikro-Optimierung. Wie es die Ladezeit beschleunigen würde. Aber Sie können das nur tun, wenn Sie Ihren geschriebenen jQuery-Code nach dem Einfügen der eigentlichen jQuery.js-Bibliothek einfügen. Da dies in der aktuellen Konstruktion nicht möglich ist, müssen Sie die Reihenfolge ändern, damit sie funktioniert.

Ansonsten allgemeine Debugging-Techniken anwenden:

  1. Ihren Browser überprüfen. Rechtsklick. Element prüfen Öffnen Sie das Tab-Netzwerk. Stellen Sie sicher, dass die Datei jQuery.js wirklich enthalten ist, sodass Sie für diese Anforderung einen HTTP-Status 200-Code haben.
  2. Stellen Sie sicher, dass jQuery wirklich in jQuery.js enthalten ist und die Datei nicht leer ist oder andere Inhalte enthält.
  3. Stellen Sie sicher, dass jQuery nicht zweimal enthalten ist.

Auch Kasse:

oder versuchen:

jQuery(document).ready(function(){ /* [code here] */ });

+0

Danke für Ihre Antwort. Funktioniert nicht. Ich habe diese Screenshots angehängt. 1. Überprüfen Sie meinen Browser: http://imgur.com/a/Vc60t 2. Ja, ist jQuery.min.js gehostet bei Google. 4. Ich habe versucht, aber Firebug sagt mir das gleiche: http://imgur.com/TLnU96w –

+0

@ErnestoCCalienteToporaz versuchen 'jQuery.noconflict();' –

+0

Es ist nicht notwendig, die gute Praxis zu folgen, um jQuery am Ende, vor dem Körper? –

0

Sie enthalten die jquery.js nach t er Aufnahme dieses Skriptes. Verschieben Sie Ihre jQuery.js-Include-Anweisung oberhalb include, die Ihren js-Code enthält.

Verwandte Themen