更改不适用于动态添加的 select2
On change not working for dynamically added select2
我有一些代码可以创建带有 select2 元素的手风琴,该元素有一个 class 称为 docType。我还有 jquery 代码在选择 jquery 元素的值时触发事件。虽然这适用于页面加载时已存在的 select2 元素,但它不会触发动态添加的元素。这是我的更改代码:
$('.docType').on('change', function() {
// the code inside should be firing for dynamically added elements
}
有谁知道为什么这种方式不起作用?
对动态添加的元素使用事件委托。
$(document).on("change",".docType", function() {
我们使用 'on' 方法来委托事件。这将为动态生成的元素添加处理程序。
$(document).on("change",".classnameyouarewatching", function() {
//Your code
}
如果您的元素是动态加载的,您将需要使用类似下面的内容。例如,假设您通过 AJAX 或类似以下输入元素的方式动态生成:
<input type="text" class="text_element" value="some value">
要向该元素添加事件处理程序,请尝试像这样使用 JS:
<script type="text/javascript">
$(document).on('change', '.text_element', function() {
console.log('Element with class "text_element" has changed');
console.log('New value is: ' + $(this).val());
});
</script>
上面的答案是正确的,但委托处理动态生成的 DOM 元素的不仅仅是 'on' 处理程序。这里的实际技巧是将处理程序放在文档上,因为它始终存在,而不是像上面那样放在元素或元素 class 上。它是 document 上的处理程序,寻找 class(on 事件的第二个参数)的元素来完成您正在寻找的工作。
我认为您需要为所有 select 元素调用 find() 方法,然后再触发如下所示的更改方法
$(".docType").find(":select").on( ("change", function() { // the code inside });
如果不起作用,请尝试 JQuery 而不是 $.
我有一些代码可以创建带有 select2 元素的手风琴,该元素有一个 class 称为 docType。我还有 jquery 代码在选择 jquery 元素的值时触发事件。虽然这适用于页面加载时已存在的 select2 元素,但它不会触发动态添加的元素。这是我的更改代码:
$('.docType').on('change', function() {
// the code inside should be firing for dynamically added elements
}
有谁知道为什么这种方式不起作用?
对动态添加的元素使用事件委托。
$(document).on("change",".docType", function() {
我们使用 'on' 方法来委托事件。这将为动态生成的元素添加处理程序。
$(document).on("change",".classnameyouarewatching", function() {
//Your code
}
如果您的元素是动态加载的,您将需要使用类似下面的内容。例如,假设您通过 AJAX 或类似以下输入元素的方式动态生成:
<input type="text" class="text_element" value="some value">
要向该元素添加事件处理程序,请尝试像这样使用 JS:
<script type="text/javascript">
$(document).on('change', '.text_element', function() {
console.log('Element with class "text_element" has changed');
console.log('New value is: ' + $(this).val());
});
</script>
上面的答案是正确的,但委托处理动态生成的 DOM 元素的不仅仅是 'on' 处理程序。这里的实际技巧是将处理程序放在文档上,因为它始终存在,而不是像上面那样放在元素或元素 class 上。它是 document 上的处理程序,寻找 class(on 事件的第二个参数)的元素来完成您正在寻找的工作。
我认为您需要为所有 select 元素调用 find() 方法,然后再触发如下所示的更改方法
$(".docType").find(":select").on( ("change", function() { // the code inside });
如果不起作用,请尝试 JQuery 而不是 $.