2012-01-06 15 views
6

Non riesco a capire cosa c'è di sbagliato nel mio codice qui. Sto cercando di caricare jQuery in modo dinamico se non è presente sulla pagina.Loading jQuery on-the-fly

<head> 
    <script> 
    (function() { 
     if (typeof jQuery != 'undefined') { 
     /* jQuery is already loaded... verify minimum version number of 1.4.2 and reload newer if needed */ 
     if (/1\.(0|1|2|3|4)\.(0|1)/.test(jQuery.fn.jquery) || /^1.1/.test(jQuery.fn.jquery) || /^1.2/.test(jQuery.fn.jquery)|| /^1.3/.test(jQuery.fn.jquery)) { 
     loadJQ(); 
     } 
     } else { 
      loadJQ(); 
     } 

    function loadJQ() { 
    /* adds a link to jQuery to the head, instead of inline, so it validates */ 
    var headElement = document.getElementsByTagName("head")[0]; 
    linkElement=document.createElement("script"); 
    linkElement.src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"; 
    linkElement.type="text/javascript"; 
    headElement.appendChild(linkElement); 
    //alert(headElement); 
    } 

    })(); 

    </script> 
</head> 

Questo è il mio corpo.

<body> 
    <button>Click me</button> 
    <script type="text/javascript"> 
    $(document).ready(function(){ 
    alert("hello"); 
    $("button").click(function(){ 
    $(this).hide(); 
    }); 
    }); 
    </script> 
</body> 

Quando lo inserisco in una pagina html, viene visualizzato un errore che dice che "$ non è definito". Qualcuno ha qualche idea del perché?

+0

Poiché jQuery non è caricato dal momento in cui la ''

2

"$ non è definito" errore deriva dal codice jQuery non essere scaricati nel momento lo script prova da eseguire.

Si può provare a utilizzare lo script attributo rinviare a ritardare l'esecuzione del codice fino a quando non viene caricato cambiando il tag script per

<script type="text/javascript" defer="defer">