0

0

Select2 触发 change 事件的正确方式

碧海醫心

碧海醫心

发布时间:2026-01-10 13:44:05

|

571人浏览过

|

来源于php中文网

原创

Select2 触发 change 事件的正确方式

使用 select2 后,原生 `change` 事件监听器失效,需改用 select2 的 `change.select2` 自定义事件,并确保在初始化后绑定,而非监听原生 `

Select2 并非简单美化原生 元素。

要让依赖联动逻辑(如级联下拉)在 Select2 环境中正常工作,必须将事件监听迁移到 Select2 提供的专用事件机制上:change.select2。

✅ 正确做法:绑定 change.select2 事件

在你的 DropDown.add() 方法中,不应再对 elsDependsOn 中的原生 (该逻辑对 Select2 无效),而应在每个 Select2 初始化后,对其 jQuery 包装对象 监听 change.select2:

add(options) {
    const el = document.getElementById(options.target);
    const $el = $(el); // 获取 jQuery 对象(必需)
    const elsDependsOn = options.dependsOn.length === 0 
        ? [] 
        : options.dependsOn.map(id => document.getElementById(id));

    const eventFunction = this.createPopulateDropDownFunction(el, elsDependsOn);

    // ✅ 关键:初始化 Select2,并监听其自定义 change 事件
    $el.select2({ width: '300px' });
    $el.on('change.select2', () => {
        eventFunction();
        console.log('Selected:', $el.val());
    });

    // ❌ 移除这行(原生 change 不触发)
    // targetObject.elsDependsOn.forEach(depEl => depEl.addEventListener("change", eventFunction));

    const targetObject = { el, elsDependsOn, func: eventFunction };
    this.targets.push(targetObject);
    return this;
}
⚠️ 注意:change.select2 事件仅在用户通过 Select2 UI(点击选项、键盘选择、清空等)显式修改值时触发;程序调用 $el.val(...).trigger('change') 也需手动触发 .trigger('change.select2') 才能同步响应。

? 同时适配原生与 Select2?(可选增强)

若你希望同一套 DropDown 类既能用于原生

PHP、MySQL和Apache的学习
PHP、MySQL和Apache的学习

PHP是程式语言、MySQL是资料库,要学好任何一种都不是件容易的事,而我们,还要将它做出成果出来!很难吗?不会的!有好的方法、好的流程,其实是可以很轻松的学会,并且应用在网页上的。 书里所介绍的是观念、流程,一个步骤一个步骤依照需求,就可以做出我们要的结果,不怕做不出来,希望藉由这本书,可以让你将这些观念实现在你的网站里。 PHP & MySQL的学习,只要有正确的观念、正确

下载
// 在 add() 内部判断是否已初始化 Select2
if ($el.data('select2')) {
    $el.on('change.select2', eventFunction);
} else {
    el.addEventListener('change', eventFunction);
}

但更推荐职责分离:为 Select2 场景单独封装一个 DropDownWithSelect2 子类,或统一初始化所有目标

? 补充说明

  • Select2 的 change 事件是 namespaced(命名空间化)的,必须写全 change.select2,仅写 change 无效;
  • 确保 jQuery 和 Select2 JS/CSS 已正确加载,且 $(el).select2() 调用在 DOM 就绪之后;
  • 若需初始值触发联动(如页面加载后默认选中),请在 initialize() 中手动调用 eventFunction(),或对首个下拉框触发一次 $el.trigger('change.select2')。

遵循以上改造,你的级联下拉即可在拥有搜索功能的同时,保持完整的依赖更新逻辑。

相关专题

更多
jquery插件有哪些
jquery插件有哪些

jquery插件有jQuery UI、jQuery Validate、jQuery DataTables、jQuery Slick、jQuery LazyLoad、jQuery Countdown、jQuery Lightbox、jQuery FullCalendar、jQuery Chosen和jQuery EasyUI等。本专题为大家提供jquery插件相关的文章、下载、课程内容,供大家免费下载体验。

150

2023.09.12

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

309

2023.10.13

jquery删除元素的方法
jquery删除元素的方法

jquery可以通过.remove() 方法、 .detach() 方法、.empty() 方法、.unwrap() 方法、.replaceWith() 方法、.html('') 方法和.hide() 方法来删除元素。更多关于jquery相关的问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

393

2023.11.10

jQuery hover()方法的使用
jQuery hover()方法的使用

hover()是jQuery中一个常用的方法,它用于绑定两个事件处理函数,这两个函数将在鼠标指针进入和离开匹配的元素时执行。想了解更多hover()的相关内容,可以阅读本专题下面的文章。

494

2023.12.04

jquery实现分页方法
jquery实现分页方法

在jQuery中实现分页可以使用插件或者自定义实现。想了解更多jquery分页的相关内容,可以阅读本专题下面的文章。

178

2023.12.06

jquery中隐藏元素是什么
jquery中隐藏元素是什么

jquery中隐藏元素是非常重要的一个概念,在使用jquery隐藏元素之前,需要先了解css样式中关于元素隐藏的属性,比如display、visibility、opacity等属性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

118

2024.02.23

jquery中什么是高亮显示
jquery中什么是高亮显示

jquery中高亮显示是指对页面搜索关键词时进行高亮显示,其实现办法:1、先获取要高亮显示的行,获取搜索的内容,再遍历整行内容,最后添加高亮颜色;2、使用“jquery highlight”高亮插件。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

172

2024.02.23

css
css

css是层叠样式表,用来表现HTML或XML等文件样式的计算机语言,不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。php中文网还为大家带来html的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

509

2023.06.15

c++主流开发框架汇总
c++主流开发框架汇总

本专题整合了c++开发框架推荐,阅读专题下面的文章了解更多详细内容。

25

2026.01.09

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 0.7万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 2.8万人学习

CSS教程
CSS教程

共754课时 | 18.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号