2016-06-14 48 views
0

我有bootstrap datepicker。现在我想通过javascript启动一个datepicker事件。我想应用datepicker的html元素如下,并在index.html中定义。Cordova:在html元素加载之前加载Javascript

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

这里是在main.js文件中定义的javascript代码。

$('.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> 

问题是我该如何运行脚本,使$('。calendar-box')给我正确的标记。我已经尝试将javascript代码放在deviceReady事件和document.ready之下。但仍然获得calendar-box的emptry阵列。

让我知道你是否需要知道别的。

+0

你试过把两个事件结合起来吗? '$(document).ready()',然后'deviceready'。 – Wikiti

+0

将脚本放在关闭身体标记之前? – evolutionxbox

+0

是@Wikiti,它没有工作 – Mj1992

回答

0

如果你不关心阻塞,扔脚本文件撰写

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

里面如果你照顾,你可以使用像requireJS,或像一个穷人的装载机,称之为异步(不要被任何事情困惑)

/** 
    * 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是阻塞的,所以它会在它的块中呈现,并且浏览器在它完成之前不会做任何事情,将这些脚本放在body的末尾,它会按顺序运行这些脚本, (如果其中一个脚本加载了一些异步内容) – irimawi

相关问题