首页 > 其他分享 >项目中遇到的问题总结

项目中遇到的问题总结

时间:2023-02-28 21:03:24浏览次数:38  
标签:总结 弹层 false 项目 遇到 输入框 点击 document onOff


功能描述:

1、单击输入框,弹出弹层,再点击弹层隐藏

2、单击空白区,弹层隐藏

3、单击弹层中的地区,把对应值填入到输入框中,弹层隐藏

功能实现:我设置了开关,单击输入框的时候,开关取反,单击弹层内的值时,开关为false,嗯这些都运行正常,和我想要达到的目的也是一样的,但是,在我想要实现功能2时遇到了问题:

问题描述:

1、如果我给document添加点击事件的时候,不把开关设置为false,会产生的问题是:第一次单击输入框的时候,开关为true,然后我直接点击空白区域,弹出层隐藏(此时开关还是true),然后我再次点击输入框,因为开关为true,所以我需要点击输入框两次,弹层才会出现,这很明显和我想要的效果不一样

2、如果我给document添加点击事件的时候,设置了开关为false,会产生的问题是,因为事件流的原因,我们单击输入框的时候,必然会触发document的点击事件,所以就是,不论我们点击多少次输入框,弹出层都是显示状态,只有我们点击输入框以外的地方时,弹出层才会隐藏,显然,这也不是我们想要的效果

解决思路:我们可以另外再定义一个变量off=false,来检测触发document的点击事件的时候,是否触发了输入框的点击事件(因为我给document添加事件的时候阻止了事件捕获),当document的点击事件触发时,如果是因为点击输入框触发的document点击事件,就不让onOff为false,否则就让其为false

具体实现看代码:(有注释哦)

var areaSelect = M('#area')//输入框
var areas = M('.selectorDialog')//弹出层
var area = document.querySelectorAll('.selectorDialog li a')//弹出层中的内容
var len = area.length
var onOff = false;
var off = false;

areaSelect.addEventListener('click',function(){//输入框点击事件处理
off = true
onOff = !onOff;
if(onOff){
areas.style.display = "block"
}else{
areas.style.display = "none"
}
},false)


for(let i=0; i<len; i++){//弹出层内的点击事件处理
area[i].onclick = function(ev){
onOff = false;
ev.preventDefault();
areaSelect.value = this.innerHTML;
}
}


document.addEventListener('click',function(){//document的点击事件处理
if(!off){//判断是否是因为点击输入框而触发的点击事件,如果为off为true时就是,否则不是,
//可以让开关为true
onOff = false;
}
off = false
areas.style.display = "none"
},true)

总结:看似不难,实际上考察的是对js基础的掌握程度,主要的知识点就是事件流的相关知识点喽!

标签:总结,弹层,false,项目,遇到,输入框,点击,document,onOff
From: https://blog.51cto.com/u_15983333/6091807

相关文章

  • 兼容性问题系列总结(一)
    之前有写过css知识点系列总结,觉得效果还不错,所以打算把遇到的兼容性问题也汇总到一起,就当记笔记喽(也是会持续更新滴)2018/6/20--js兼容性问题--1.JSON解析问题:  ecmascr......
  • npm 常用安装包命令总结
    直接安装使用npm直接安装模块,默认是生产环境,包名会注册到package.json里的dependencies中,且会把包安装到项目node_modules文件夹里面:npminstallmodule_name......
  • 2.28每日总结
    今天学习了androidstudio中新建空白项目生成项目的各个部分的作用,以及makeproje后build中的一些文件的作用,然后简单跟着教学进行了一些编程,例如运行出第一个helloword......
  • 程序设计竞赛算法与实现考点总结(模板)
    一,转换(星期计算)栗:给定一个日期,问这个日期是星期几?Mothod1---根据这个日期与今天的距离X,假设今天是星期Y,给定日期是今天星期之前:((Y-X)%7+7)%7+1;......
  • Nginx+Gunicorn+supervisor部署基于flask开发的项目
    1.概述(1)概述FlaskFlask是Python中有名的轻量级同步web框架Gunicorn高性能的PythonWSGI服务器NginxNginx是一个高性能的HTTP和反向代理服务器,同时也是......
  • 2月28号总结
    7.1类与对象类定义一种全新的数据类型,包含一组变量和函数;对象是类这种类型对应的实例。例如在一间教室中,可以将Student定义成类,表示“学生”这个抽象的概念。那么每个同学......
  • 每日总结
    今天就记录一下一个解题思路。关于实现记事本app的连续打卡时间判断首先因为客观的原因,打卡的记录从时间来说只会增加,所以就不用考虑年月的计算,只考虑day的计算、如果差......
  • 路飞项目---day04()
    昨日回顾#1封装日志 #咱们用的方案 django--》原生日志---》配置文件copy过来---》写一个py文件,在py文件中拿到配置文件中定义的django日志对象,以后导入使用即可......
  • 2.28每日总结7
    今天下午用了3个小时的时间继续对androidstudio的编程进行学习,学习了Button按钮的使用,点击按钮进行函数的调用,然后学习了单选框和复选框以及文字输入的页面显示,还没有......
  • Luffy项目:3、前端调整(全局css、全局配置、全局axios...),后端主页轮播图表设计,接口部分
    目录Luffy项目一、luffy项目前端调整1、全局css2、全局配置文件3、安装axios4、安装vue-cookies5、安装elementui6、安装bootstrap和jq二、后端主页部分1、轮播图部分表设......