记一次与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数组表示的一个或多个数据集的学习信息.它们可以被理解为多维观察的列表.我们说这些阵列的第一个轴是样本轴,而第二个轴是 ...
随机推荐
- JavaScript的同步与异步
1.手绘一张图说明. 2.为什么JavaScript是单线程(这里引用阮一峰老师的话) JavaScript的单线程,与它的用途有关. 作为浏览器脚本语言,JavaScript的主要用途是与用户互动, ...
- JavaScript权威设计--事件处理介绍(简要学习笔记十七)
1.事件相关概念 事件类型:一个用来说明发生什么类型事件的字符串 事件目标:是发生的事件或与之相关的对象. 事件处理程序(事件监听程序):是处理货响应事件的函数. 事件对象:是与特定事件相关并且包含有 ...
- bitmap对海量无重复的整数排序--转
原文地址:http://blog.csdn.net/u013074465/article/details/46956295 现在有n个无重复的正整数(n 小于10的7次方),如果内存限制在1.5M以内 ...
- docker对数据卷容器进行备份
转载请注明出处 官网的数据以及各大博客都没有对这个的具体说明,本人也是理解了好久. 我们使用docker的过程中,使用共享的数据卷是经常的,那么.我们要怎么进行备份呢? 首先,我们得了解下面4个命 ...
- 实现跨浏览器html5表单验证
div:nth-of-type(odd){ float: left; clear: left; } .origin-effect > div:nth-of-type(even){ float: ...
- JVM之内存结构
JVM是按照运行时数据的存储结构来划分内存结构的.JVM在运行Java程序时,将他们划分成不同格式的数据,分别存储在不同的区域,这些数据就是运行时数据.运行时数据区域包括堆,方法区,运行时常量池,程序 ...
- 关于input标签和placeholder在IE8,9下的兼容问题
一. input常用在表单的输入,包括text,password,H5后又新增了许多type属性值,如url, email, member等等,考虑到非现代浏览器的兼容性问题,这些新的type常用在移 ...
- IOS开发基础知识碎片-导航
1:IOS开发基础知识--碎片1 a:NSString与NSInteger的互换 b:Objective-c中集合里面不能存放基础类型,比如int string float等,只能把它们转化成对象才可 ...
- ViewPager之Fragment页面切换
一.概述 ViewPager是android-support-v4中提供的类,它是一个容器类,常用于页面之间的切换. 继上篇文章<ViewPager之引导页>之后,本文主要介绍ViewPa ...
- 【极品代码】一般人我不告诉他,手机端h5播放时不自动全屏代码
已测适用于ios,某些安卓手机微信下播放视频会出现播放器控件(这个实在是无力吐槽噢,因为之前还遇到过微信播放完视频后竟然无法退出全屏出现广告的情况,只有播放完后刷新页面并且要放到框架页里才能屏蔽微信视 ...