未捕获的 TypeError: $(...).select2 不是 CodeIgniter 中的函数
Posted
技术标签:
【中文标题】未捕获的 TypeError: $(...).select2 不是 CodeIgniter 中的函数【英文标题】:Uncaught TypeError: $(...).select2 is not a function in CodeIgniter 【发布时间】:2021-06-22 23:39:50 【问题描述】:我是 CodeIgniter 的新手,目前被困在一项任务中,我需要在添加新产品时使用多选下拉菜单来显示类别,但是当我运行我的代码时,它显示以下错误: https://i.stack.imgur.com/xxeCV.png 我已经阅读了几乎所有类似的问题,但没有发现任何与 CodeIgniter 相关的问题。对此最常见的答案是 jQuery 被加载了两次,但我检查了所有不是这种情况的文件。因此,如果有任何与 CodeIgniter 相关的问题,请指导我解决问题或帮助我编写代码。 感谢您提前回复。 添加新产品的视图:
<?php
defined('BASEPATH') OR exit('No direct script access allowed');?>
<div class="main-panel">
<div class="content-wrapper">
<div class="row">
<div class="col-md-12 grid-margin">
<div class="d-flex justify-content-between align-items-center">
<div>
<?php
$CI =& get_instance();
$CI->load->library('ion_auth');
if($CI->ion_auth->is_admin())
echo '<h4 class="font-weight-bold mb-0">Admin Dashboard</h4>';
else
echo '<h4 class="font-weight-bold mb-0">User Dashboard</h4>';
?>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-12 grid-margin">
<div class="card">
<div class="card-body">
<h4 class="card-title">Add Product</h4>
<?php echo form_open(base_url()."products/manageproducts/addproductinsert");?>
<div class="row">
<div class="col-md-6">
<div class="form-group row">
<label class="col-sm-3 col-form-label">Product Name</label>
<div class="col-sm-9">
<input type="text" class="form-control" id="product_name" name="product_name" placeholder="Product Name"/>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="form-group row">
<label class="col-sm-3 form-check-label">Categories</label>
<div class="col-sm-9">
<select id="catdropdown" name="cat_list[]" multiple="multiple">
<option value='0'>--Select Category--</option>
</select>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="text-center">
<input type="submit" name="submit" value="Submit" class="btn btn-primary">
</div>
</div>
</div>
<?php echo form_close(); ?>
</div>
</div>
</div>
</div>
</div>
<script type="text/javascript">
$(document).ready(function()
$('#catdropdown').select2(
ajax:
url:'<?php echo base_url() ?>categories/managecategories/getcategories',
type:'post',
dataType:'json',
delay:250,
data:function(param)
return
searchTerm: param.term
,
processResults: function(response)
return
results:response
,
cache:true
);
);
</script>
控制器:
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class ManageProducts extends CI_Controller
public function __construct()
parent::__construct();
$this->load->database();
//$this->load->library('javascript/jquery');
$this->load->library(['ion_auth', 'form_validation']);
$this->load->helper(['url', 'language','form']);
$this->form_validation->set_error_delimiters($this->config->item('error_start_delimiter', 'ion_auth'), $this->config->item('error_end_delimiter', 'ion_auth'));
$this->lang->load('auth');
$this->load->model('products_model');
$this->load->model('categories/categories_model');
public function addproduct()
$res=$this->categories_model->showallcategories();
$data['categories']=$res;
$this->load->view('header');
$this->load->view('sidebar');
$this->load->view('addproduct',$data);
$this->load->view('footer');
包含 jquery 和 select2 的头文件:<!DOCTYPE html>
<html lang="en">
<head> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel="stylesheet" href="<?php echo base_url()?>vendors/ti-icons/css/themify-icons.css">
<link rel="stylesheet" href="<?php echo base_url()?>vendors/base/vendor.bundle.base.css">
<link rel="stylesheet" href="<?php echo base_url()?>css/style.css">
<link rel="shortcut icon" href="<?php echo base_url()?>images/favicon.png" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></script>
<link href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css" rel="stylesheet" />
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
<script src="https://cdn.jsdelivr.net/jquery.validation/1.16.0/jquery.validate.min.js"></script>
<script src="https://cdn.jsdelivr.net/jquery.validation/1.16.0/additional-methods.min.js"></script>
</head>
【问题讨论】:
你的 codeigniter 版本是多少? 3.1.11 @RiazLaskar 尝试将.select2 js代码放在“head”部分jst中检查一次 试过了。仍然在不同的行上显示相同的错误。 @RiazLaskar 是库加载正确检查网络,并在加载库时控制台是否有任何错误,即url 【参考方案1】:我解决了! 我通过在脚本标签中使用 defer 属性来做到这一点。 以下是对我有用的方法,希望将来对任何需要它的人有用:
<script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js" defer></script>
感谢所有提供帮助的人。
【讨论】:
以上是关于未捕获的 TypeError: $(...).select2 不是 CodeIgniter 中的函数的主要内容,如果未能解决你的问题,请参考以下文章
VueJS:未捕获(承诺中)TypeError:无法读取未定义的属性“推送”
未捕获的TypeError:(中间值).map不是函数[重复]
如何使用自定义错误消息捕获“TypeError:无法读取未定义的属性(读取'0')”?
未捕获(承诺)TypeError:无法读取未定义的属性“长度”