自己尝试封装的一个在工作当中使用的多级弹窗插件:

;(function ($, window, document) { //用一个自调用匿名函数把插架代码包裹起来,防止代码污染
$.fn.multi = function (options, callback) {
let defaults = { //defaults 使我们设置的默认参数。
trigger: '', //触发事件的class
popClass1: '', //第一个弹窗的class
popClass2: '', //第二个弹窗的class
};
options = $.extend(defaults, options); //将传入参数和默认参数合并
let $this = $(this); //响应事件对象 //触发弹窗
$this.on('click', options.trigger, function () { //功能代码部分,绑定事件
//关闭页面上的弹窗
$(options.popClass1).parent().hide();
$(options.popClass2).parent().hide();
//打开新触发的弹窗
$(this).next().show();
}); let levelValue = ''; //每层选择的值
//第一层 事件代理
$this.on('click', options.popClass1 + ">li", function () {
//控制背景颜色高亮
$(this).addClass("active").siblings().removeClass("active");
// 获取当前点击的li的子元素的HTML节点 将获取的节点放到页面显示的第二级中
let html = $(this).children("ul").html();
$(this).parent().parent().next().children(".multi-level-ul2").html(html);
$(this).parent().parent().next().show(); });
//第二层 事件代理
$this.on('click', options.popClass2 + ">li", function () {
$(this).addClass("active").siblings().removeClass("active");
levelValue = $(this).children("span").text();
$(this).parent().parent().prev().prev().text(levelValue);
let level = $this.attr('data-level');
//把选择的值和层级通过回调函数传递回去
callback(levelValue, level);
$(this).parent().parent().prev().hide();
$(this).parent().parent().hide();
});
//点击空白处隐藏div
$(document).click(function (event) {
let targetArea = $('.multi-level-wrap'); // 设置目标区域
if (!targetArea.is(event.target) && targetArea.has(event.target).length === 0) {
$(options.popClass1).parent().hide();
$(options.popClass2).parent().hide();
}
});
}
})(jQuery, window, document);

在页面当中调用:

$('.multi-level-wrap').each(function() {
$(this).multi({
trigger: '.multi-level-input', //触发事件的class
popClass1: '.multi-level-ul1', //第一个弹窗的class
popClass2: '.multi-level-ul2', //第二个弹窗的class
}, function(params, level) { })
})

  

参考链接:https://blog.csdn.net/weixin_39398244/article/details/81539486

参考链接:https://www.cnblogs.com/cbzg/p/5713232.html

参考链接:https://www.jianshu.com/p/5196cb659fb6

最新文章

  1. .Net组件程序设计之序列化
  2. Linux SVN 命令详解(zz)
  3. Elasticsearch 连接查询
  4. UOJ#61. 【UR #5】怎样更有力气
  5. Cocos2d-x实现粒子效果的三种方式
  6. window.onresize 多次触发的解决方法
  7. WordPress Lazy SEO插件lazyseo.php脚本任意文件上传漏洞
  8. c++异常安全和copy and swap策略
  9. 重写String类,也有些区别,供参考
  10. ckplayer,超酷网页播放器,用于集成在网站中的播放器
  11. 一个Windows C++的线程池的实现
  12. 远程方法调用(RMI)原理与示例 (转)
  13. Javascript中的数组去重-indexof方法
  14. viewpager+layout布局文件随数据多少创建滑动页面
  15. Socket层实现系列 — accept()的实现(一)
  16. 3.14 unittest之skip
  17. PC/FORTH 判定
  18. invalid request block size: 4542 (max 4096)...skip引起的Nginx 502 Bad Geteway
  19. [T-ARA][느낌 아니까][懂得那份感觉]
  20. 研究php单例模式实现数据库类

热门文章

  1. 浮动float和清除clear
  2. [旧版] CASthesis 模板编译的问题
  3. [winafl]这几天的折腾
  4. CF1146F Leaf Partition 树形DP
  5. ThinkPHP系统常量
  6. NOI 2017滚粗退役记
  7. java中如何根据函数查询引用的jar包
  8. TensorFlow使用记录 (五): 激活函数和初始化方式
  9. Zabbix 4.0.2试用(七):在Linux主机中安装zabbix agent并添加该主机(yum源安装)
  10. [CSP-S模拟测试]:那一天她里我而去(堆优化Dijkstra)