[英]Select2() is not a function
所以我已经下载了 select2 我已经通过将它放入我的文件夹来“安装它”,然后在我检查控制台时将它加载到我的网站上(在那里我可以看到所有正在加载的脚本)我可以看到文件 select2.js
我去了他们的文档并复制了它并添加了$("#e9").select2();
但是,当我加载页面时,出现以下错误:
TypeError: $(...).select2 is not a function
$("#e9").select2();
有没有其他人经历过这样的事情?
这里的附加信息是我的脚本:
jQuery(document).ready(function(){
var max_amount = parseFloat($('#max_amount').val());
$( "#item_amount" ).keyup(function() {
if($(this).val() > max_amount){
$(this).val( max_amount);
}
if( /\D/.test($(this).val()) ){
alert('Må kun indeholde tal!');
$(this).val('');
}
if($(this).val()== '0'){
alert('Må ikke være 0!');
$(this).val('');
}
});
$("#e1").select2();
});
function addToBasket(){
var amount = $('#item_amount').val();
if(amount == ""){
amount = 1;
}
if(amount > 0){
$.ajax({
type: 'POST',
url: myBaseUrl + 'Products/addItemToBasket',
dataType: 'json',
data: {
id: window.location.pathname.substring(window.location.pathname.lastIndexOf('/') + 1),
amount: amount
},
success: function (data) {
var urlToBasket = myBaseUrl+'Products/basket';
var newAmount = parseInt(amount)
var price = data[0]['Product']['pris'];
var id = data[0]['Product']['id'];
var dat = data;
var tmp_basket_html = $('#basket_amount').html();
if($('#basket_amount').html() !== " Tom"){
$('#shopping_table_body').append(
"<tr id='"+id+"'>" +
"<td class='image'>" +
""+
"</td>" +
"<td class='name'>" +
" "+data[0]['Product']['name'] +
"</td>"+
"<td class='quantity'>" +
"x "+amount +""+
"</td>"+
"<td class='total'>" +
""+price*amount+
"</td>" +
""+
"<td class='remove'>" +
"<input class='icon-remove' type='button' onclick='removeItemFromBasket("+id+")'>"+
"</td>"+
"</tr>"
);
}else{
$("#shopping_menu").append(
"<ul class='dropdown-menu topcartopen'>"+
"<li id='basket_list'>"+
"<table id='shopping_table'>"+
"<tbody id='shopping_table_body'>"+
"<tr id='"+id+"'>" +
"<td class='image'>" +
""+
"</td>" +
"<td class='name'>" +
" "+data[0]['Product']['name'] +
"</td>"+
"<td class='quantity'>" +
"x "+amount +""+
"</td>"+
"<td class='total'>" +
""+price*amount+
"</td>" +
""+
"<td class='remove'>" +
"<input class='icon-remove' type='button' onclick='removeItemFromBasket("+id+")'>"+
"</td>"+
"</tr>"+
"</table>"+
"</li>"+
"<div class='well pull-right'>"+
"<input type='button' onclick='goToBasket()' class='btn btn-success' value='Tjek ud'>"+
"</div>"+
"</ul>"
)
}
updateTotal(amount,price);
updateBasketAmount();
}
});
}
Notifier.success('Vare tilføjet', 'Tilføjet'); // text and title are both optional.
}
function updateTotal(amount, price){
var price = parseFloat(price);
var oldValue = parseFloat($('#basket_total_cost').html());
var newPrice = amount*price+oldValue;
$('#basket_total_cost').html(newPrice);
}
function updateBasketAmount(){
var tmp = $('#basket_amount').html();
if(!isNaN(tmp)){
var oldAmount = parseInt(tmp.substr(0,2));
var i = oldAmount + 1;;
$('#basket_amount').html(
""+i+" vare(r)"
);
}else{
$('#basket_amount').html(
"1"+" vare(r)"
);
}
}
function goToBasket(){
window.location.href = myBaseUrl+'Products/basket';
}
当我开始将 select2 与 XCrud 一起使用时,我遇到了这个问题。 我通过禁用 XCrud 加载 JQuery 来解决它,这是第二次,并将其加载到 body 标记下方。 因此,请确保 JQuery 不会在您的页面上加载两次。
如果在 select2 js 文件之前加载使用选择框绑定 select2 的 js 文件,则会引发此错误。 请确保文件应按此顺序排列,例如..
有同样的问题。 通过延迟加载 select2 对其进行排序
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.8/js/select2.min.js" defer></script>
我也遇到了同样的问题,请注意,发生此错误是因为我使用 select2 的选择器不存在或未加载。
因此,通过执行以下操作确保 $("#selector") 存在
if ($("#selector").length > 0)
$("#selector").select2();
从document.ready()
函数中添加$("#id").select2()
。
我使用了 jQuery slim 版本并收到此错误。 通过使用普通的 jQuery 版本,问题得到了解决。
这个问题已经很老了,但我会写一些小笔记,因为我今天花了几个小时调查同样的问题。 在我动态加载部分代码后,select2 无法在新的选择框上运行,并显示错误“$(...).select2 不是函数”。
我发现在非打包的 select2.js 中有一行阻止它重新处理 main 函数(在我的 3.5.4 版本中它在第 45 行):
if (window.Select2 !== undefined) { return; }
所以我只是在那里评论它并开始使用 select2.js (而不是缩小版本)。
//if (window.Select2 !== undefined) { // return; //}
它开始工作得很好,当然它现在可以进行多次处理而失去性能,但无论如何我都需要它。
希望这会有所帮助,弗拉基米尔
将config.assets.debug = false
放在 config/environments/development.rb 中。
您可能指的是出现上述错误的两个 jquery 脚本。
对我来说, select2.min.js
文件工作而不是select2.full.min.js
。 我已经手动定义了从github page获得的 dist 文件夹中复制的文件。 还要确保在 select2 文件之前导入了一个jQuery(document).ready(...)
定义和 jquery 文件。
对于像我这样的新手,最终会遇到这个问题:如果您尝试对使用纯 javascript 而不是使用 jQuery 检索的元素调用 .select2() ,也会发生此错误。
这因“select2 不是函数”错误而失败:
document.getElementById('e9').select2();
这有效:
$("#e9").select2();
就我而言,当 webpacker 和 sprockets 都尝试导入 jQuery 时,我在 Rails 应用程序中收到此错误。 直到我的代码编辑器自动尝试将 jQuery 导入 webpacker 模块时,我才注意到它。
我今天遇到了同样的问题,其他答案都没有奏效。 我不明白这是如何或为什么起作用的,但它确实并且(敲木头)仍然有效。
但首先,关于我的具体情况:
我在一个 .js 文件中使用 select2 并尝试将其放入另一个文件中,但出现此错误。 jQuery 在另一个 .js 文档中运行良好,而我尝试使用的第二个在 html 中比我正在编写的第一个 .js 文档更晚,并且都晚于 jquery 和 select2 标签。
好的,现在对于没有意义但确实有效的解决方案:
我将 jQuery 元素的定义放入较早的 .js 文件中,并将该变量的 .select2 放入较晚的 .js 文件中。 很奇怪吧? 所以,像这样:
<head>
*blah blah blah html headers*
<script src="/static/js/jquery-3.6.0.js"></script>
<script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></script>
</head>
<body>
*blah blah blah page stuff*
<script src="/static/js/first.js"></script>
*blah blah some more stuff*
<script src="/static/js/second.js"></script>
第一个.js
const selector = $('#select-this')
第二个.js
selector.select2({
*&c, &c, &c.*
ControlId.select2({...}); 没有工作,但以下工作:
$(ControlId).select2({...});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.