2015-06-03 2 views
-1

Так что я работаю над простым виджетами javascript, и я начал с него по следующему учебнику this. Я загрузке JQuery динамически, как показано ниже:Ошибка: для JavaScript Bootstrap требуется jQuery

if (window.jQuery === undefined || window.jQuery.fn.jquery !== '2.1.4') { 

UPDATE, Вот как я загружаю JQuery

var script_tag = document.createElement('script'); 
     script_tag.setAttribute("type", "text/javascript"); 
     script_tag.setAttribute("src", 
      "https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.min.js"); 
document.documentElement).appendChild(script_tag);   

//Once loaded load other javascripts 
if (this.readyState == 'complete' || this.readyState == 'loaded') { 

    scriptLoadHandler(); 

    } 
} 

Ниже моя scriptLoadHandler функция:

function scriptLoadHandler() { 

     // Restore $ and window.jQuery to their previous values and store the 
     // new jQuery in our local jQuery variable 
     jQuery = window.jQuery.noConflict(true); 
     // Call our main function 
     main(); 
    }  

Теперь, в основном метод, который я пытаюсь загрузить Bootstrap js следующим образом:

function main() { 

     console.log("undefined" == typeof jQuery); 

     var head = document.getElementsByTagName("head")[0]; 
     var js = document.createElement("script"); 
     js.type = "text/javascript"; 
     js.src = "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"; 
     head.appendChild(js); 

    } 

Но он все еще дает мне ошибку выше, хотя порядок, в котором они загружаются, является правильным, и когда я проверяю журнал консоли, он дает мне false, что означает, что определен jQuery.

+0

Комментарии не для широкого обсуждения; этот разговор был [перемещен в чат] (http://chat.stackoverflow.com/rooms/79519/discussion-on-question-by-hussain-errorbootstraps-javascript-requires-jquery). – Taryn

ответ

0

Проверьте, загружен ли JQuery перед загрузкой загрузочного запроса. Если JQuery не загружен начальная загрузка не может быть загружена

+0

Я проверил, что и в ответе документа сценарий jquery лежит над скриптом начальной загрузки. – xmaestro

0

//Load jquery here

Вы не загружая JQuery там.

Вы должны либо создать элемент SCRIPT в DOM перед этим скриптом с помощью src в вашем местоположении jQuery lib, либо загрузить его динамически после строки, которую я цитировал (т. Е. Создать тег сценария, установить src в ваш jquery lib relative или абсолютный URL/URI, добавьте обработчик обработчика onloaded для выполнения scriptLoadHandler и, в конечном итоге, добавьте новый скрипт в DOM)

Самый простой способ - загрузить скрипт через скрипт TAG ПЕРЕД сценарием, который вы используете.

EDIT: после получения дополнительной информации по ОП, вот решение:

  1. проверка версии JQuery: если это не тот, который вы хотите, загрузить его.
  2. После того, как вы загрузили версию jQuery, которая вам нужна (или если она уже загружена), загрузите Bootstrap.

JSFiddle: http://jsfiddle.net/1h6emjwu/2/

function loadScript(src, callback) { 
     var js = document.createElement('script'); 
     js.src = src; 
     js.type = 'text/javascript'; 

     if (typeof callback === 'function') { 
      js.addEventListener('load', callback); 
     } 

     document.body.appendChild(js); 
    } 

    var myScript = function() { 
     //alert(window.jQuery.fn.jquery); 
     alert($.fn.modal ? 'Bootstrap loaded' : 'Bootstrap not loaded'); 
    } 

    if (window.jQuery === undefined || window.jQuery.fn.jquery !== '2.1.4') { 
     window.oldJQuery = window.jQuery; // so that you can return back whenever you want 
     loadScript('https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js', function() { 
      loadScript('https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js', myScript); 
     }); 
    } else { 
     loadScript('https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js', myScript); 
    } 
+0

OP не опубликовал весь соответствующий код, так как я вижу его, потому что тогда 'if (this.readyState == 'complete' || this.readyState == 'loaded')' не имеет смысла –

+0

Возможно, да, но опять же я думаю, что динамическая загрузка jQuery в шаблоне с бутстрап-тематикой не имеет смысла. Я бы выбрал загрузку jQuery из CDN напрямую ... – Jack

+0

Я не особо разбираюсь в контексте веб-сайта, но, возможно, OP использует какой-то пользовательский скрипт и абсолютно точно загружает определенную версию jQuery 2.1.4 и поэтому хочет переопределить любая другая версия загружается или загружается, если jQuery уже не включен, но я просто догадываюсь, неясный вопрос.** РЕДАКТИРОВАТЬ: ** забыть о пользовательском скрипте, это для виджета, так что действительно чувствую: «Итак, я работаю над простым виджетами javascript» –

Смежные вопросы