最好将 .js 加载到页脚中,因为您的 HTML 应该在开始运行脚本之前完全加载。
看这里的原因
我使用通用页脚来处理 .js 文件
public function index()
{
$this->load->view('template/header');
$this->load->view('template/nav');
$this->load->view('thing/landing');
$this->load->view('template/footer');
}
我的页脚视图是
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
$caller_class = $this->router->class;
$caller_method = $this->router->fetch_method();
?>
<script type="text/javascript" src="<?php echo base_url(); ?>public/js/jquery.min.js"></script>
<?php
//look for JS for the class/controller
$class_js = "public/js/custom-".$caller_class.".js";
if(file_exists(getcwd()."/".$class_js)){
?><script type="text/javascript" src="<?php echo base_url().$class_js; ?>"></script>
<?php
}
//look for JS for the class/controller/method
$class_method_js = "public/js/custom-".$caller_class."-".$caller_method.".js";
if(file_exists(getcwd()."/".$class_method_js)){
?><script type="text/javascript" src="<?php echo base_url().$class_method_js; ?>"></script>
<?php
}
?>
</body>
</html>
使用$this->router->class;
或$this->router->fetch_method();
检测正在使用的控制器或控制器中的方法。然后检测该控制器/方法是否存在 .js 文件
只需很少的管理,您就可以拥有控制器和/或方法特定的脚本,而无需摆弄页脚。
然后在文件 pub/js/custom-mycontrollername-mymethod.js 中使用 (jquery);
$(document).ready(function() {
if ( $( "#mydivthing" ).length ) {
$('#mydivthing').html("fetching..");
$.ajax({
........
});
} else {
console.log("skipped js segment");
}
});
此处 jquery 仅在文档存在时运行ready
(如 jquery 建议的那样)
,您还可以使用它if ( $( "#mydivthing" ).length ) {
来检查您的 div 是否实际在页面上。因此,当事件未加载(为了速度)时,您不会触发事件。但是由于 jquery 可能会进行一些检查 - 这可能仅对更大的代码运行有帮助,而不仅仅是单个按钮单击事件。
虽然问题是针对视图的,但这个答案涉及到控制器/方法级别。所以虽然一个方法可以有多个视图 - 这仍然是用户看到的视图/屏幕。
额外的好处是您可以仅通过文件名将 .js 文件关联到控制器/方法。