记一次与a标签相遇的小事
最近做的一个项目,按钮使用的是a标签做的,样子还不错。不过正是这个a标签把我坑死了,有一个场景是点击a标签去调后台服务,为了防止用户频繁点击按钮提交,在去请求后台服务的时候肯定要先把按钮的事件给禁止掉,后台服务回来之后,要把按钮变成可以点击的状态。button有一个disabled属性可以禁止按钮的点击,但是a标签并没有这个属性,disabled对它没有用。当时想了许久都不知道怎么去处理这个东西,想过把a标签换成button,但是一想到要找UI修改demo就不去了,顺便增加一下自己这方面的知识。下面写一下LZ面对这一小问题的尴尬经历。
找了许久的资料,发现都没有很好的方法符合自己的要求,想到one、off、remove,但是然并卵,去掉之后事件就回复不来了,真是尴尬。原本自信满满的一下子觉的真艰难,后面又去看了看jquery的api有没有符合的,发现也是木有。LZ暂时就在一些只要点击一次的事件使用了one或remove,但是转念一想不对呀,要是服务报错了,用户就点击不了,这要把用户坑了,把用户坑了就是把自己坑了。这不相当给自己挖一个坑,自己跳下去呀,LZ肯定不能干着事情呀。LZ马上觉的还是去一趟WC比较靠谱,放松放松一下脑子。
回来之后,果然脑子好使了,联想到自己处理过多次弹框的问题(有多次相同的弹框,场景要求只能弹一次),发现与这个还有点类似,与马上动手搞。先得有一个a标签吧!
<a class="btn">我就要点多次,你能咋得</a>
要有事件吧!(LZ内心暗骂,擦,不要怂,就是干!)
var isOnclick=true;//默认可以点击
$(".btn").on(click,function(){
if(isOnclick){
isOnclick=false;//不能点击了
ajax{//不管成功与否都把isOnclick设置为true,即可点击的状态
。。。。。。。。。。。
isOnclick=true;
}
)
}
上面就是一个简单的过程,不过实现了自己需要的东西。主要就是设置一个变量来判断a标签目前的状态,说一下主要的流程:
1、首先定义一个变量isOnclick,默认为true.即一进去页面默认a标签为可点击状态。
2、当用户点击之,立即把isOnclick设置为false,这样用户多次点击都不会重复执行。
3、当后台服务完成,把isOnclick设置为true,这样a标签又可以点击了。
完成上面的流程后,a标签肯定变成这样了。哈哈,此时LZ的心情!!!
<a class="btn">大哥,我错了。给点饭吃吧</a>
不过本着精益求精的原则,LZ突然想不能点击的时候是不是得有点提示呀,不然用户不知道,一直在那狂点,没有撒作用。不得投诉LZ的代码。肯定会一边点着鼠标,一边把口中暗骂,那个SB写的代码,完全没有用嘛。此时LZ肯定会打了个喷嚏,是谁在想我???想想就觉的全身发抖。以上内容纯属LZ瞎逼逼的。吼吼吼,回到问题中来,不过为了让用户体验更好,一般都会在按钮点击不了之后把按钮置灰,这也相当与提醒用户此时按钮是不可点击的。想到着LZ马上找到UI,给我做一个置灰的按钮呗。UI肯定也烦了,一下子这个,一下子那个。这么简单的事情都不会(其实这也是LZ瞎想的,哈哈,想象力已经丰富到一个境界了)。其实也就设置了一个背景颜色,做为一个后端狗,LZ这点还是会的,写一个bcakgruond-color嘛,lz数了数,加上-一共16个字母写错2个,正确率快到90%了呢。哈哈,正确的写法是btn-color{ background-color: gray;}。现在的a标签已经变为这样了。
<a class="btn">干嘛不给人家加一个好看的颜色,呜呜</a>
一想到a有样式了,LZ又不爽了,我还是把你干趴下,不然人生艰难。马上又写了一段吊炸天的代码(感觉LZ真辛酸,这就掉渣天了)。
$(".btn").on(click,function(){//默认a不带颜色,可以点击
if(!$(this).has("btn-color")){//
$(".btn").addClass("btn-color");//颜色变暗,不可点击
ajax{//
。。。。。。。。。。。
$(".btn").removeClass("btn-color");//又可以点击了
}
}
}
发现这个简单了一点,代码控制的好了一点。不过lz还是决定把流程梳理一下,以防有跟我一样的小伙伴遇到这种问题,为扩大我们的队伍做贡献(义正言辞呀)。主要思路是依靠一个样式来判断状态,主要流程是:
1、先行一个样式。样式可以随便啦!默认是没有样式的啦
2、在js中判断有没有这个样式,有肯定不能让它进后台了,所以使用了一个!。
3、没有就是正常的按钮,可以放它过去,有就不能让它过去。
终于把事件解决了,好开心。不过lz也发现好像这个要是直接用浏览器修改一下类是不是也可以提交了。这个问题还没有测试,不过相信lz90%的字母正确率的代码是有用的(那来的自信,lz天生自信满满),后面测试一下在来考虑这个问题了。打扫战场,总结经验,以防止敌人扩大战线(好严肃呀)。回归正题,虽然这是一个很简单的问题,但是也觉的能够学习到东西,主要是以下几点:
1、细节与体验方面也是在写代码不可以错过的地方。
2、思维方式不能固定,以为button有相应的属性,a标签也会有相关的属性,思维定势。多个角度思考问题。
3、小问题也要大思考。
lz自身不足:
1、经验啦!
2、知识面啦!
一说不足就字少了,鄙视自己。哈哈,肯定有人问字母正确率这么低不是不足吗???哈哈。
lz与a标签的相遇就这样结束啦,小伙伴有没有更好的做法呢,lz需要集思广益呢。有的话的请拿起手中的电话拨打以下号码:88888888888
记一次与a标签相遇的小事的更多相关文章
- 记一场与 cookie 的相遇
简介: cookie 翻译过来为 “小甜点,一种酥性甜饼干,很美味的...”,咳咳,打住!我们这里说的是 “甜点” 文件,它是浏览器储存在用户电脑上的一小段纯文本格式的文件. 由于 http 是一种无 ...
- 记一次mybatis<if>标签的问题
前言 到底还是没理解清楚的锅~~~~搞了好久...啊啊啊啊 错误: There is no getter for property named 'name' in 'class java.lang.L ...
- Mybatis系列全解(八):Mybatis的9大动态SQL标签你知道几个?提前致女神!
封面:洛小汐 作者:潘潘 2021年,仰望天空,脚踏实地. 这算是春节后首篇 Mybatis 文了~ 跨了个年感觉写了有半个世纪 ... 借着女神节 ヾ(◍°∇°◍)ノ゙ 提前祝男神女神们越靓越富越嗨 ...
- [OpenCV-Python] OpenCV 中的图像处理 部分 IV (六)
部分 IVOpenCV 中的图像处理 OpenCV-Python 中文教程(搬运)目录 23 图像变换 23.1 傅里叶变换目标本小节我们将要学习: • 使用 OpenCV 对图像进行傅里叶变换 • ...
- DailyTick 开发实录 —— 开始
2009 年我读了李笑来老师的<把时间当朋友>,知识了柳比歇夫的时间记录法.当时激动坏了,马上动手实践起来.一开始的时候,是用一个小本子,走到哪儿都带着.完成一件事,就记录一下花费的时间. ...
- Linux C++ 开发常用工具,常用指令工作手册
vim常用: :set nu显示行数 :set mouse=a 鼠标滑动屏幕,:set ic :set noic 忽略不忽略大小写 /word_to_search\c \c表示忽略大小写 c小写忽略, ...
- Template模板
目标 模板介绍 模板变量 常用标签 常用过滤器 自定义过滤器 模板结构 加载静态文件 一 模板介绍 在之前的章节中,视图函数只是直接返回文本,而在实际生产环境中其实很少这样用,因为实际的页面大多是带 ...
- guling code细节
detect_hand.py 分水岭算法: 任何一幅灰度图像都可以被看成拓扑平面,灰度值高的区域可以被看成是山峰,灰度值低的区域可以被看成是山谷.我们向每一个山谷中灌不同颜色的水,随着水的位的升高,不 ...
- scikit-learning教程(二)统计学习科学数据处理的教程
统计学习:scikit学习中的设置和估计对象 数据集 Scikit学习处理来自以2D数组表示的一个或多个数据集的学习信息.它们可以被理解为多维观察的列表.我们说这些阵列的第一个轴是样本轴,而第二个轴是 ...
随机推荐
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(61)-如何使用框架来开发
系列目录 前言: 有些园友经常问如何正确快速开发,但是我告诉你没有什么帮助文档比自己动手做更加实在,不用代码生成器 这一节专门抽了些时间来非常非常详细演示这个框架的数据流,废话不多说,现在开始!下面看 ...
- Reactor by Example--转
原文地址:https://www.infoq.com/articles/reactor-by-example Key takeaways Reactor is a reactive streams l ...
- Cesium原理篇:Material
Shader 首先,在本文开始前,我们先普及一下材质的概念,这里推荐材质,普及材质的内容都是截取自该网站,我觉得他写的已经够好了.在开始普及概念前,推荐一首我此刻想到的歌<光---陈粒>. ...
- PowerShell 操作 Azure SQL Active Geo-Replication 实战
<Azure SQL Database Active Geo-Replication简介>一文中,我们比较全面的介绍了 Azure SQL Database Active Geo-Repl ...
- [php]laravel框架容器管理的一些要点
本文面向php语言的laravel框架的用户,介绍一些laravel框架里面容器管理方面的使用要点.文章很长,但是内容应该很有用,希望有需要的朋友能看到.php经验有限,不到位的地方,欢迎帮忙指正. ...
- 2.EF中 Code-First 方式的数据库迁移
原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/code-first-migrations-with-entity-framework/ 系列目 ...
- C++异常处理:try,catch,throw,finally的用法
写在前面 所谓异常处理,即让一个程序运行时遇到自己无法处理的错误时抛出一个异常,希望调用者可以发现处理问题. 异常处理的基本思想是简化程序的错误代码,为程序键壮性提供一个标准检测机制. 也许我们已经使 ...
- Android 手机卫士8--删除通话记录
1.编写代码需要注意bug: 再删除通话记录的时候,删除的是以前的通话记录,本次拦截下来的电话号码,通话记录没有删除?????? 问题原因:数据库中本次通话记录的电话号码还没有插入,就做了删除操作 2 ...
- java中如何实现多态
复习基础知识 多态,就是重载和重写.重载发生在一个类中.重写发生在子类,意思就是子类重写父类相同名称的方法.刚学语言有的东西,不必搞得那么清楚,只有知道怎么用就行了,有的问题你要想真正把它搞得很懂,短 ...
- 树莓派 Linux备忘
//更新树莓派 sudo apt-mark hold raspberrypi-bootloader sudo apt-get update sudo apt-get upgrade //配置 rasp ...