使用页眉/页脚模板</script>时放置<script>标签的位置

时间:2014-02-05 20:23:31

标签: javascript php codeigniter templates

在我的codeigniter应用程序中,我创建了一个header.php和一个footer.php。当我加载视图时,我在控制器中执行以下操作:

$this->load->view('includes/template', $data);

template.php文件如下所示:

$this->load->view('includes/header');
$this->load->view($main_content);
$this->load->view('includes/footer');

到目前为止,这一直都很顺利。但是,我想将所有加载javascript文件的代码从标题移动到页脚 - 以帮助我的页面加载更快。像这样的东西就是我所说的:

<script src="<?php echo base_url('assets/js/jquery-1.8.1.min.js')?>"></script>
<script src="<?php echo base_url('assets/js/jquery-ui-1.8.23.custom.min.js')?>"></script>
<script src="<?php echo base_url('assets/js/jquery.qtip-1.0.0-rc3.min.js')?>"></script>

问题是,在组成“main_content”的文件中,如果我有javascript逻辑,它就不再有效了。

例如,假设我有以下视图作为“main_content”

    <!-- DISPLAY RESULTS -->
<div class="row-fluid"> 
  <div class="span12 visible-desktop visible-tablet" id="l1locations">
    <table id="switchrecords" name="switchrecords" class="table table-bordered">
    </table>
 </div>

 <div class="span12 visible-phone" id="l1locations">
    <div id="mobileswitchrecords"></div>
</div>              
</div>
    <button class="btn search">Search</button>


 <script>
 $(document).ready(function(){
      $('#search').show();
      $('.search').live('click',function(){
          etc... logic that dynamically fills in the table
 });
 </script>

我认为这个逻辑仍然可以工作,因为它在document.ready()中,并且文档就绪在加载所有文件之前不会触发。 但我一定是错的,因为我的代码不再有效。 我可以在标题中包含主jquery包含文件,并在页脚中包含所有其他js文件。但任何其他建议将不胜感激。

编辑1

请注意,目前,每个视图都有不同的内嵌javascript。有些页面会调用很多ajax,其他页面只有简单的脚本。无论如何,对于我来说,将所有内联javascript移动到文件中是可以的,但页脚如何知道要包含哪个js文件?我不想一直包含所有javascript,因为js代码仅适用于特定页面。

1 个答案:

答案 0 :(得分:1)

$(document).ready是jQuery。你试图在它加载之前使用jQuery,所以它会失败。您可以尝试将所有core-JS包含移动到每个视图文件的底部,在特定视图JS之前,以及包含其他footer-y内容的页脚。这样,您的JS仍然在底部(在内容之后)加载,也在视图特定代码之前加载。