gpt4 book ai didi

javascript - Select2 不适用于 JS 生成的元素

转载 作者:太空宇宙 更新时间:2023-11-04 16:21:34 25 4
gpt4 key购买 nike

我正在使用Select2在我的项目中。我的问题是select2:select事件不适用于 JS 生成的元素。

我创建了这个片段,以便您可以测试我所说的内容。

var i = 0,
data = [
{
id: 0,
text: 'Bob'
},
{
id: 1,
text: 'Martin'
},
{
id: 2,
text: 'John'
}
];
$('#in-9').select2({
data: data
});

// Button click event
$('#append').on('click', function () {
var html = '<p><label for="in-' + i + '">Select2 #' + i + ':</label><br><input id="in-' + i + '" class="in"><br></p>';

// Append HTML to Body
$('body').append(html);

// Assign data to input
$('#in-' + i).select2({
data: data
});

// Increase counter
i++;

});

// Trigger "select" on select2 only works in first element.
$('.in').on('select2:select', function() {
alert('wii');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/css/select2.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/js/select2.full.js"></script>
<button id="append">Append to Body</button>

<!-- First element -->
<p>
<label for="in-9'">Select2 #9:</label><br>
<input id="in-9" class="in"><br>
</p>

您可以在 fiddle 中看到带有 id="in-9" 的 HTML 元素在 HTML 中创建,但是当单击 Append to Body 时调用 Javascript 函数且生成的元素无法触发 select2:select与第一个类似的事件。

所以我的问题是,我如何调用 select2:select动态生成的元素上的事件?

最佳答案

您可以使用 jQuery 的 on()方法!

The .on() method attaches event handlers to the currently selected set of elements or dynamically generated elements in the jQuery object

你可以试试这个:

$('body').on('select2:select', '.in', function() {
alert('wii');
});

看看下面的代码片段:

var i = 0,
data = [
{
id: 0,
text: 'Bob'
},
{
id: 1,
text: 'Martin'
},
{
id: 2,
text: 'John'
}
];
$('#in-9').select2({
data: data
});

// Button click event
$('#append').on('click', function () {
var html = '<p><label for="in-' + i + '">Select2 #' + i + ':</label><br><input id="in-' + i + '" class="in"><br></p>';

// Append HTML to Body
$('body').append(html);

// Assign data to input
$('#in-' + i).select2({
data: data
});

// Increase counter
i++;

});

// Trigger "select" on select2 only works in first element.
$('body').on('select2:select', '.in', function() {
alert('wii');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/css/select2.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/js/select2.full.js"></script>
<button id="append">Append to Body</button>

<!-- First element -->
<p>
<label for="in-9'">Select2 #9:</label><br>
<input id="in-9" class="in"><br>
</p>

希望对你有帮助!

关于javascript - Select2 不适用于 JS 生成的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40591147/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com