记一次与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数组表示的一个或多个数据集的学习信息.它们可以被理解为多维观察的列表.我们说这些阵列的第一个轴是样本轴,而第二个轴是 ...
随机推荐
- git推送文件至github缺少README文件
一直报这个错! 主要是因为本地仓库中缺少README这个文件. 解决办法:第一步:git pull --rebase origin master 将github中的README文件下到本地仓库中. 第 ...
- ASP.NET OWIN OAuth:refresh token的持久化
在前一篇博文中,我们初步地了解了refresh token的用途——它是用于刷新access token的一种token,并且用简单的示例代码体验了一下获取refresh token并且用它刷新acc ...
- 开源组件ExcelReport 1.5.2 使用手册
ExcelReport是一款基于NPOI开发的报表引擎组件.它基于关注点分离的理念,将数据与样式.格式分离.让模板承载样式.格式等NPOI不怎么擅长且实现繁琐的信息,结合NPOI对数据的处理的优点将E ...
- 理解 Neutorn LBaaS - 每天5分钟玩转 OpenStack(120)
Load Balance as a Service(LBaaS)是 Neutron 提供的一项高级网络服务.LBaaS 允许租户在自己的网络中创建和管理 load balancer. load bal ...
- 构建自己的PHP框架--构建模版引擎(1)
前段时间太忙,导致好久都没有更新博客了,今天抽出点时间来写一篇. 其实这个系列的博客很久没有更新了,之前想好好规划一下,再继续写,然后就放下了,今天再捡起来继续更新. 今天我们来说一下,如何构建自己的 ...
- Java 快速排序两种实现
快速排序,只要学习过编程的人肯定都听说过这个名词,但是有时候写的时候还真蒙住了,网上搜罗了下以及查阅了"introduction to algorithm",暂时找到两种实现快排的 ...
- Vertica 分区表设计(续)
在上篇Vertica 分区表设计中,已经提过了Vertica的分区表创建和分区删除,但举例上并不系统, 本篇文章将系统的对分区表设计及后续的删除分区进行讲解. 概述:Vertica分区表(天和月)创建 ...
- go语言结构体
定义: 是一种聚合的数据类型,是由零个或多个任意类型的值聚合成的实体. 成员: 每个值称为结构体的成员. 示例: 用结构体的经典案例处理公司的员工信息,每个员工信息包含一个唯一的员工编号.员工的名字. ...
- 黑马程序员——ARC机制总结和用ARC建立模型
ARC 全称:Automatic Reference Counting 使用ARC 只需要在建立一个新的项目的时候把 下面的√打上 Xcode5以后都会默认建议开发者使用ARC机制 新的项目中如果有部 ...
- StringBuilder的使用
今天用到了StringBuilder来拼接查询语句,发现这个真好用,决定做个小结. 百度一个StringBuilder的定义:String 对象是不可改变的.每次使用 System.String 类中 ...