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

相关文章

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

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

使用Navicat工具比对两个数据库所有表结构的差异案例详解

《使用Navicat工具比对两个数据库所有表结构的差异案例详解》:本文主要介绍如何使用Navicat工具对比两个数据库test_old和test_new,并生成相应的DDLSQL语句,以便将te... 目录概要案例一、如图两个数据库test_old和test_new进行比较:二、开始比较总结概要公司存在多

C#比较两个List集合内容是否相同的几种方法

《C#比较两个List集合内容是否相同的几种方法》本文详细介绍了在C#中比较两个List集合内容是否相同的方法,包括非自定义类和自定义类的元素比较,对于非自定义类,可以使用SequenceEqual、... 目录 一、非自定义类的元素比较1. 使用 SequenceEqual 方法(顺序和内容都相等)2.

锐捷和腾达哪个好? 两个品牌路由器对比分析

《锐捷和腾达哪个好?两个品牌路由器对比分析》在选择路由器时,Tenda和锐捷都是备受关注的品牌,各自有独特的产品特点和市场定位,选择哪个品牌的路由器更合适,实际上取决于你的具体需求和使用场景,我们从... 在选购路由器时,锐捷和腾达都是市场上备受关注的品牌,但它们的定位和特点却有所不同。锐捷更偏向企业级和专

IDEA常用插件之代码扫描SonarLint详解

《IDEA常用插件之代码扫描SonarLint详解》SonarLint是一款用于代码扫描的插件,可以帮助查找隐藏的bug,下载并安装插件后,右键点击项目并选择“Analyze”、“Analyzewit... 目录SonajavascriptrLint 查找隐藏的bug下载安装插件扫描代码查看结果总结Sona

两个月冲刺软考——访问位与修改位的题型(淘汰哪一页);内聚的类型;关于码制的知识点;地址映射的相关内容

1.访问位与修改位的题型(淘汰哪一页) 访问位:为1时表示在内存期间被访问过,为0时表示未被访问;修改位:为1时表示该页面自从被装入内存后被修改过,为0时表示未修改过。 置换页面时,最先置换访问位和修改位为00的,其次是01(没被访问但被修改过)的,之后是10(被访问了但没被修改过),最后是11。 2.内聚的类型 功能内聚:完成一个单一功能,各个部分协同工作,缺一不可。 顺序内聚:

Maven(插件配置和生命周期的绑定)

1.这篇文章很好,介绍的maven插件的。 2.maven的source插件为例,可以把源代码打成包。 Goals Overview就可以查看该插件下面所有的目标。 这里我们要使用的是source:jar-no-fork。 3.查看source插件的example,然后配置到riil-collect.xml中。  <build>   <plugins>    <pl

jenkins 插件执行shell命令时,提示“Command not found”处理方法

首先提示找不到“Command not found,可能我们第一反应是查看目标机器是否已支持该命令,不过如果相信能找到这里来的朋友估计遇到的跟我一样,其实目标机器是没有问题的通过一些远程工具执行shell命令是可以执行。奇怪的就是通过jenkinsSSH插件无法执行,经一番折腾各种搜索发现是jenkins没有加载/etc/profile导致。 【解决办法】: 需要在jenkins调用shell脚

Jenkins 插件 地址证书报错问题解决思路

问题提示摘要: SunCertPathBuilderException: unable to find valid certification path to requested target...... 网上很多的解决方式是更新站点的地址,我这里修改了一个日本的地址(清华镜像也好),其实发现是解决不了上述的报错问题的,其实,最终拉去插件的时候,会提示证书的问题,几经周折找到了其中一遍博文

eclipse安装subversion(SVN)版本控制插件

陈科肇 查看插件更新站点 网址:http://subclipse.tigris.org/servlets/ProjectProcess?pageID=p4wYuA 网站截图: 根据自己的eclipse版本,选择需要的更新站点. 使用eclipse集成subservion插件 Help > Install New Software…> 等待下载安装插件…