当列表获得新项目时触发事件

Posted

技术标签:

【中文标题】当列表获得新项目时触发事件【英文标题】:Fire an event when a liste get new item 【发布时间】:2021-04-11 12:44:53 【问题描述】:

我有一个空列表:

<ul id="select2-choices"></ul>

这个列表使用 ui 获取添加到其中的元素,所以我得到了这个:

 <ul id="select2-choices">
   <li>item1</li>
   <li>item2</li>
 </ul>

我想触发一个事件,以便在该列表获得新项目时调用一个函数:

$("#select2-choices").on("Thevent", function (e))
            self.SetDefaultTeam(e);
        );

怎么做?

【问题讨论】:

将内容添加到 DOM 时不会引发事件。您是否控制附加新 li 元素的 JS 代码?如果是这样,您可以使用trigger() 手动引发事件。如果你不控制 JS,那么你可以使用 MutationObserver 什么创建列表项以及如何创建?您遗漏了问题的重要部分。 【参考方案1】:

您可以使用如下所示的变异观察者。代码已注释。我创建了一个按钮来模拟新项目的添加,但突变观察者是识别 DOM 树中变化的函数。

注意如果您有权访问添加新 li 的代码,那么最好从那里触发您的函数。

如果您还希望有别的东西,请告诉我。


// Create a button to add options to mimic your functionality
$("#add-li").click(function() 
  $("ul#select2-choices").append("<li>New</li>");
);

// Create mutation observer
var observer = new MutationObserver(function(mutations) 
  
    // Something has changed in the #select2-choices
    console.log("Change noticed in childList");
    
);

// Just look out for childList changes
var config = 
  attributes: false,
  childList: true,
  characterData: false
;

// Select target
var target = document.querySelector('#select2-choices');

// Launch observer with above configuration
observer.observe(target, config);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<ul id="select2-choices">
</ul>

<button id="add-li">Add option</button>

【讨论】:

以上是关于当列表获得新项目时触发事件的主要内容,如果未能解决你的问题,请参考以下文章

在 NestedList 中创建项目后立即触发的事件

wpf点击checkbox触发了两次

使用 MVVM 从 WPF ListView 项触发双击事件

用于ComboBox项目选择的事件处理程序(选定项目未必更改)

当项目具有相同名称时,阻止ComboBox触发SelectionChanged事件?

在jQuery中添加一个按钮以列出项目并触发click事件