yii2-krajee-select2 插件的两个“坑”

2024-01-04 03:38

本文主要是介绍yii2-krajee-select2 插件的两个“坑”,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

到写这个的时候,yii2-krajee-select2插件版本v2.1.0,坑还在

首先说,yii2 krajee select2插件就是按yii2插件方式包装的jquery插件select2,这个select2还是很好用的,最大特色是下拉列表项目很多的时候,它支持模糊搜索并选择,也支持多选,也可以禁用某些项目,总之,是对select的极大增强。

但在实际使用过程中,遇到了两个需要绕行的“坑”:1、在jquery 的模态对话框(modal dialog)中使用时,会出现显示不全或者搜索框无法点击聚焦的情况,这个是select2的毛病;2、同一个表单中多个select2,表单复位时,只能复位最后一个select2,这个其实是yii2-krajee-select2的毛病

第一个问题的解决方案:

插件设定 id(options中可以设置placeholder和id),然后写js代码,给对应插件设定dropdownParent属性为modal dialog的id (通常是index视图中class为modal fade的那个,即模态对话框最外层)

第二个问题的问题所在与解决方案:

karik-v/yii2-widget-select2/assets/js/select2-krajee.js文件131-137行:

if (doReset) {$el.closest("form").off('.krajees2').on("reset.krajees2", function () {setTimeout(function () {$el.trigger("change").trigger("krajeeselect2:reset");}, 100);});}


对应插件$el给表单复位事件添加事件处理器时,on的同时off了(即它自己事件处理完了就把对应处理代码注销了),这样,其余更多的select2虽然添加了同样的事件处理器,但在触发时,还没等到处理,事件处理器已经被注销了。经过试验,把off('.krajees2')删除,就不存在问题,但直接改作者源码,下次composer update时麻烦就大了,所以,我们改为让最后一个select2去帮助手动复位上一个,上一个再复位上一个或者最后一个负责前面所有的复位

$this->registerJs("
var s2Options = eval($('#labclass-search-course-ids').attr('data-krajee-select2'));
s2Options.dropdownParent = $('#labclass-front-advanced-search');
");

 <?= $form->field($model, 'course_ids')->widget(Select2::className(), [   //modal dialog内必须设定 dropdownParent'data' => Course::getItems(null, $model->term_id),'options' => ['multiple' => true, 'placeholder' => '仅显示本学期课程', 'id' => 'labclass-search-course-ids'],'pluginOptions' => ['allowClear' => true]]) ?><?= $form->field($model, 'exe_teacher_ids')->widget(Select2::className(), ['data' => User::getItems(),'options' => ['multiple' => true, 'placeholder' => '可选多位教师', 'id' => 'labclass-search-et-ids'],'pluginOptions' => ['allowClear' => true],]) ?><?= $form->field($model, 'room_ids')->widget(Select2::className(), [    //已经有元素设定 dropdownParent'data' => $roomItems,'options' => ['multiple' => true, 'placeholder' => '可选多个房间', 'id' => 'labclass-search-room-ids'],'pluginOptions' => ['allowClear' => true],'pluginEvents' => [     //krajee Select2插件似乎存在bug,只能随表单复位最后一个select2"change" => "function() {$('#labclass-search-et-ids').trigger('change').trigger('krajeeselect2:reset');$('#labclass-search-course-ids').trigger('change').trigger('krajeeselect2:reset');}",],]) ?>

另外,在 bootstrap modal dialog (模态对话框)中显示 multiple (多选)的 select2 时, placeholder 字符串长一点初始显示会不完全,暂时似乎没有好办法,只能给 modal dialog 添加显示时触发来修改了,类似如下

$this->registerJs("
$('#lab-class-search-modal').on('show.bs.modal', function (e) {$('input.select2-search__field').each(function () {$(this).width('100%')})
})
", $this::POS_END); // 确保 多选select2 的 placeholder 显示完全

这篇关于yii2-krajee-select2 插件的两个“坑”的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/568049

相关文章

C# 比较两个list 之间元素差异的常用方法

《C#比较两个list之间元素差异的常用方法》:本文主要介绍C#比较两个list之间元素差异,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 使用Except方法2. 使用Except的逆操作3. 使用LINQ的Join,GroupJoin

浏览器插件cursor实现自动注册、续杯的详细过程

《浏览器插件cursor实现自动注册、续杯的详细过程》Cursor简易注册助手脚本通过自动化邮箱填写和验证码获取流程,大大简化了Cursor的注册过程,它不仅提高了注册效率,还通过友好的用户界面和详细... 目录前言功能概述使用方法安装脚本使用流程邮箱输入页面验证码页面实战演示技术实现核心功能实现1. 随机

CnPlugin是PL/SQL Developer工具插件使用教程

《CnPlugin是PL/SQLDeveloper工具插件使用教程》:本文主要介绍CnPlugin是PL/SQLDeveloper工具插件使用教程,具有很好的参考价值,希望对大家有所帮助,如有错... 目录PL/SQL Developer工具插件使用安装拷贝文件配置总结PL/SQL Developer工具插

maven中的maven-antrun-plugin插件示例详解

《maven中的maven-antrun-plugin插件示例详解》maven-antrun-plugin是Maven生态中一个强大的工具,尤其适合需要复用Ant脚本或实现复杂构建逻辑的场景... 目录1. 核心功能2. 典型使用场景3. 配置示例4. 关键配置项5. 优缺点分析6. 最佳实践7. 常见问题

MyBatis分页插件PageHelper深度解析与实践指南

《MyBatis分页插件PageHelper深度解析与实践指南》在数据库操作中,分页查询是最常见的需求之一,传统的分页方式通常有两种内存分页和SQL分页,MyBatis作为优秀的ORM框架,本身并未提... 目录1. 为什么需要分页插件?2. PageHelper简介3. PageHelper集成与配置3.

Maven 插件配置分层架构深度解析

《Maven插件配置分层架构深度解析》:本文主要介绍Maven插件配置分层架构深度解析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Maven 插件配置分层架构深度解析引言:当构建逻辑遇上复杂配置第一章 Maven插件配置的三重境界1.1 插件配置的拓扑

Idea插件MybatisX失效的问题解决

《Idea插件MybatisX失效的问题解决》:本文主要介绍Idea插件MybatisX失效的问题解决,详细的介绍了4种问题的解决方法,具有一定的参考价值,感兴趣的可以了解一下... 目录一、重启idea或者卸载重装MyBATis插件(无需多言)二、检查.XML文件与.Java(该文件后缀Idea可能会隐藏

C语言实现两个变量值交换的三种方式

《C语言实现两个变量值交换的三种方式》两个变量值的交换是编程中最常见的问题之一,以下将介绍三种变量的交换方式,其中第一种方式是最常用也是最实用的,后两种方式一般只在特殊限制下使用,需要的朋友可以参考下... 目录1.使用临时变量(推荐)2.相加和相减的方式(值较大时可能丢失数据)3.按位异或运算1.使用临时

java两个List的交集,并集方式

《java两个List的交集,并集方式》文章主要介绍了Java中两个List的交集和并集的处理方法,推荐使用Apache的CollectionUtils工具类,因为它简单且不会改变原有集合,同时,文章... 目录Java两个List的交集,并集方法一方法二方法三总结java两个List的交集,并集方法一

Python如何计算两个不同类型列表的相似度

《Python如何计算两个不同类型列表的相似度》在编程中,经常需要比较两个列表的相似度,尤其是当这两个列表包含不同类型的元素时,下面小编就来讲讲如何使用Python计算两个不同类型列表的相似度吧... 目录摘要引言数字类型相似度欧几里得距离曼哈顿距离字符串类型相似度Levenshtein距离Jaccard相