スクリプトの実行を開始する前に HTML を完全にロードする必要があるため、フッターに .js をロードすることをお勧めします。
理由はこちらをご覧ください
ユニバーサル フッターを使用して .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>
using$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ファイルをコントローラー/メソッドに関連付けることができるというボーナスが追加されました。