2016-06-14 2 views
0

У меня есть bootstrap datepicker. Теперь я хочу начать событие datepicker через javascript. Элемент html, к которому я хочу применить datepicker, следует и определяется в index.html.Кордова: загрузка Javascript до загрузки элементов html

<input type="text" placeholder="Departure date..." data-provide="datepicker" class="calendar-box"> 

А вот Javascript код определен в файле main.js.

$('.calendar-box').on('changeDate', function(ev){ 
    $(this).datepicker('hide'); 
}); 

Когда я отладить этот код и попытаться найти $('.calendar-box') это дает мне пустой массив, который означает, что HTML-элементы не определяется временем этот кусок кода работает.

Ниже приведен порядок загрузки скриптов.

<script type="text/javascript" src="libs/jquery.js"></script> 
    <script type="text/javascript" src="libs/bootstrap-datepicker.min.js"></script> 
    <script type="text/javascript" src="cordova.js"></script> 
    <script type="text/javascript" src="libs/index.js"></script> 
    <script type="text/javascript" src="libs/platformOverrides.js"></script> 
    <script type="text/javascript" src="libs/angular.min.js"></script> 
    <script type="text/javascript" src="libs/angular-route.min.js"></script> 
    <script type="text/javascript" src="scripts/assets.js"></script> 
    <script type="text/javascript" src="scripts/assets.js"></script> 
    <script type="text/javascript" src="scripts/main.js"></script> 

quesstion как я могу запустить скрипт, что $ («календарное окно») дает мне право тег. Я уже пробовал поставить javascript-код под событие deviceReady и document.ready. Но все равно получите массив emptry для calendar-box.

Сообщите мне, если вам нужно знать что-то еще.

+0

Вы пытались объединить оба события? '$ (document) .ready()', затем 'deviceready'. – Wikiti

+0

Поместите сценарии перед тегом закрывающего тега? – evolutionxbox

+0

да @Wikiti, он не работает – Mj1992

ответ

0

Если вы не заботитесь о блокировке, бросить скрипт внутри document.write

 document.write('<script type="text/javascript" src="scripts/assets.js"><' + '\/script>'); 

Если уход, вы можете использовать что-то вроде requireJS, или что-то вроде загрузчиком бедного человека, называют его Async (не путать ни с чем лучше)

/** 
    * Async accepts a url and a callback, it loads the script, adding an eventListener 
    * to make sure the callback is done when the script is loaded 
    * @param {String} some url 
    * @param {onLoadCallback} you do whatever you want when this callback is called 
    **/ 
    var loadAsyncScript = function(url, onLoadCallback) { 
    var script = document.createElement('script'); 
    var parent = document.getElementsByTagName('script')[0]; 

    if (onLoadCallback) { 
    // assign event before src is set, 
    // IE may start getting scripts just after src is assigned and before script is attached to DOM 
    attachEvent(script, 'load', onLoadCallback); 
    } 

    script.async = true; 
    script.src = '//' + url; 
    parent.parentNode.insertBefore(script, parent); 
}; 
+0

вы можете использовать его в качестве loadAsync ({{someURL}}, функция() {// поместить свой код здесь }) ; – irimawi

+0

эй спасибо, но я не понимаю, как это поможет в решении моей проблемы? – Mj1992

+0

хорошо, document.write блокируется, поэтому он будет отображать в своем блоке, и браузер ничего не сделает до тех пор, пока это не будет сделано, поместив эти сценарии в конец вашего тела, выполнив эти сценарии по порядку, и когда остальная часть (в случае, если один из этих сценариев загружает что-то асинхронное внутри) – irimawi

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