Witaj, muszę zbudować widżety 3rd Party zJavaScript i php. Widżety te będą musiały być używane w jQuery i jQuery UI, a być może w przyszłości inne biblioteki i wtyczki jQuery. więc gdy mój klient umieszcza ten widget na swojej stronie, muszę wiedzieć, czy jQuery i jQuery UI są już załadowane, a jeśli nie, to załaduj ja. Zbudowałem coś, ale nie działa.
<script>
if (typeof jQuery == "undefined") {
// jQuery is not loaded
//alert("jQuery is not loaded");
var script = document.createElement("script");
script.type = "text/javascript";
script.src = "http://code.jquery.com/jquery-1.9.1.js";
document.getElementsByTagName("head")[0].appendChild(script);
var script_ui = document.createElement("script");
script_ui.type = "text/javascript";
script_ui.src = "http://code.jquery.com/ui/1.10.3/jquery-ui.js";
document.getElementsByTagName("head")[0].appendChild(script_ui);
} else {
// jQuery is loaded
//alert("jQuery is loaded");
if (typeof jQuery.ui !== "undefined") {
// ui plugin exists
alert("ui plugin exists");
} else {
// ui plugin DOES NOT exist
//alert("ui plugin DOES NOT exist");
var script_ui = document.createElement("script");
script_ui.type = "text/javascript";
script_ui.src = "http://code.jquery.com/ui/1.10.3/jquery-ui.js";
document.getElementsByTagName("head")[0].appendChild(script_ui);
}
}
</script>
Działa to dobrze, ale gdy próbuję pracować z datepicker jQuery otrzymuję ReferenceError: jQuery nie jest zdefiniowany.
<script>
jQuery(document).ready(function() {
// Handler for .ready() called.
jQuery(function() {
jQuery( "#datepicker" ).datepicker();
});
});
</script>
Nawet bez jQuery (document) .ready (function () To nie działa
Proszę Hellp ...
Odpowiedzi:
6 dla odpowiedzi № 1To powinno wystarczyć, jeśli dobrze zrozumiałem problem, funkcja jQuery () jest zdefiniowana tylko wtedy, gdy jest już załadowana.
if (jQuery) { //jQuery is loaded }
Możesz to zrobić dla potrzebnych funkcji, niezależnie od tego, czy jest to jQuery, jQuery-ui czy coś innego.
0 dla odpowiedzi nr 2
Do czasu
<script>
jQuery(document).ready(function() {
// Handler for .ready() called.
jQuery(function() {
jQuery( "#datepicker" ).datepicker();
});
});
</script>
został osiągnięty, jQuery niekoniecznie musi być zrobioneładowanie, przeglądarka nie wie, co z nią zrobić, próbuje go wykonać i mówi: "Nie mam pojęcia, co to jest jQuery". Jeśli jednak później wywołasz ten sam blok kodu, powinien on działać poprawnie.
Najprostszym sposobem obejścia tego jest postawienietwoja procedura obsługi $ (document) .ready () do oddzielnego skryptu .js i dołącz ten skrypt do twojego nagłówka, tak aby jQuery zadzwonił do obsługi zdarzenia, gdy jest gotowy, a nie na odwrót. Stworzyłem skrzypce, aby to pokazać: http://jsfiddle.net/Cjv2k/4/
0 dla odpowiedzi № 3
Możesz pętli, aż obiekt jQuery jest prawidłowe za pomocą tego:
var checkJQ = setInterval(function() {
if(jQuery) {
console.log("jQuery loaded");
clearInterval(checkJQ);
}
}, 300);