




本文介绍如何通过事件委托为 select2 动态生成的搜索输入框绑定 `keyup` 事件,使其用户输入实时转换为大写字母,解决原生 `onkeyup` 属性无法直接应用的问题。
Select2 是一款功能强大的下拉选择增强库,但它会动态创建搜索输入框(通常类名为 .select2-search__field),该元素不在初始 DOM 中,因此无法直接通过 onkeyup 属性或常规 $(selector).on('keyup', ...) 绑定事件——因为选择器在初始化时找不到目标元素。
正确做法是使用 事件委托(Event Delegation):将事件监听器绑定在文档(或一个始终存在的父容器)上,并指定实际触发事件的目标选择器。这样,即使 .select2-search__field 后续动态插入,事件仍能被准确捕获。
✅ 推荐解决方案如下:
$(document).on('keyup', '.select2-search__field', function(e) {
// 防止非字母数字字符被意外处理(可选增强)
if (e.key && /[\p{L}\p{N}]/u.test(e.key)) {
this.value = this.value.toUpperCase();
}
});⚠️ 注意事项:

? 扩展建议:若还需支持粘贴(paste)事件的大写转换,可补充:
$(document).on('paste', '.select2-search__field', function(e) {
setTimeout(() => {
this.value = this.value.toUpperCase();
}, 0);
});综上,利用事件委托是操作 Select2 动态控件的标准实践。掌握这一模式,不仅能解决自动大写问题,也为处理其他动态生成表单元素(如日期选择器输入框、Tagify 输入域等)提供了通用思路。