一个DOM元素,如:div,既绑定了 click 事件,又绑定了 dblclick 事件,这两个事件分别要做独立的事情。事件处理上没有冲突,都可以各自完成各自的操作。双击的时候虽然是执行了 dblclick 事件,但是在这之前,也执行了 click 事件,那么,如何来禁止或者说屏蔽这次多余的 click 事件呢?本文将提供给您一个比较好的解决办法。
情况分析:
首先,来了解一下点击事件发生的先后顺序:
单击:mousedown, mouseup, click
双击:mousedown, mouseup, click, mousedown, mouseup, click, dblclick
由此看来,dblclick 事件发生之前,实际上发生了两次 click 事件。其中,第一次的 click 是会被屏蔽掉,但是第二次则不会,所以就出现在双击的时候,也触发 click 事件。
解决办法:
知道了原因,接下来自然就是想办法把这次 click 给屏蔽掉,但是由于各浏览器均未提供直接去停止事件的方法,所以值得改变思路。
由于我们只需要屏蔽一次 click 事件即可,由此联想到,可以利用 setTimeout() 方法来延时完成 click 事件的处理,在需要停止 click 的时候利用 clearTimeout() 方法停止这一事件的处理。这样,就可以比较容易的写出如下的 javascript 代码:
一个DOM元素,如:div,既绑定了 click 事件,又绑定了 dblclick 事件,这两个事件分别要做独立的事情。事件处理上没有冲突,都可以各自完成各自的操作。双击的时候虽然是执行了 dblclick 事件,但是在这之前,也执行了 click 事件,那么,如何来禁止或者说屏蔽这次多余的 click 事件呢?本文将提供给您一个比较好的解决办法。情况分析: 首先,来了解一下点击事件发生
如果在一个DOM对象上同时绑定单击(
click
)和双击(
dbl
click
)
事件
,当在这个DOM对象上发生双击
事件
时,第一次点击(
click
)会 触发一次单击(
click
)
事件
,第二次点击(连续的)也会触发双击(
dbl
click
)
事件
,还是会触发单击(
click
)
事件
(IE7与 firefox)。
解决
方法
:
<button on
click
=test(1) on
dbl
click
=test(2)></button>
[removed]
var i = 1;
function test(n) {
i = n;
var val = set
一个dom上同时绑定了
click
事件
和
dbl
click
事件
,
click
事件
可以正常使用,但是
dbl
click
事件
在执行时会先执行
click
事件
,导致
dbl
click
事件
不能按照预想的方式执行
解决
方案
在网上看了一些文章,都提到一种:延时执行
click
事件
,延时250ms效果好点
<div on
click
="
click
Handle()" on
dbl
click
="
dbl
click
Handle()">这是一句话</div>
const timeId = null
// 单击事
情况描述 当某个元素,如:div,同时绑定了
click
事件
和
dbl
click
事件
,而这两个
事件
又要处理相对独立的业务,也就是
click
的时候不能触发
dbl
click
,
dbl
click
的时候不能触发
click
。在实际测试中发现,当
dbl
click
的时候,总会出现1次
click
。下文将要
解决
的就是这个问题。 情况分析 首先我们要清楚
click
和
dbl
click
的执行顺序,测试过程略,下面是测试结果:
click
:mousedown — mouseup —
click
dbl
click
:mousedown — mouseup —
click
— mousedown — mouseup
在JS中代码中同一功能块中通常同时会用到单击、双击
事件
,但通常会遇到一个问题,就是在双击的时候即执行了一次双击
事件
,而且还执行了两次单击
事件
。此类
冲突
在ZTree、DHTMLX中经常遇到。
想要
解决
两个
事件
冲突
,需要对单击
事件
进行延时,如果在此延时中又监测到单击
事件
,那么认为此两次单击属于一个双击
事件
,则只执行双击
事件
,并第一时间将延时定时器清理,以防止第二次单击生效。
具体代码如下:
var
click
Flag = null;//是否点击标识(定时器编号)
function doOn
Click
(...) {
if(
click
Flag) {//取消上次延时未执行的
方法
原生javascript为我们提供了单击和双击(
click
和
dbl
click
)两种点击
事件
的监听
var oBtn = document.getElementById('
click
Btn');
oBtn.on
click
= function(){
console.log('单击');
var oBtn = document.getElementById('
click
Btn');
oBtn.on
dbl
click
= function(){
console.log('双击');
对同一元素添加单击@
click
和双击@
dbl
click
事件
时,双击
事件
执行之前单击
事件
总会执行两次,项目中要用到于是写了个小demo(写的比较粗),其实很简单就是把单击
事件
写在延时器里面晚一点执行,并如果是双击的话清除这个延时器也就清除了单击
事件
这就搞定了,做下记录
计算机程序设计员理论二选择题
1. (单选题)配置高速缓冲存储器(Cache)是为了
解决
( ) 。
2. (单选题)如果按字长来划分,微型机可分为8位机、16位机、32位机、64位机和128位机等。所谓32位机是指该计算机所用的CPU( ) 。
3. (单选题)计算机内部表示二进制信息的最小单位4. (单选题)64KB=_____B。5. (单选题)既是输入设备又是输出设备的是( ) 。6. (单选题)下列( )指
事件
绑定中,执行双击
事件
(
dbl
click
)时能触发两次单击
事件
(
click
)。即一个标签元素(如button等),如果元素同时绑定了单击
事件
(
click
)和双击
事件
(
dbl
click
),那么执行单击
事件
(
click
)时,不会触发双击
事件
(
dbl
click
), 执行双击
事件
(
dbl
click
)时却会触发两次单击
事件
(
click
)。
先看一...
当某个元素,如:div,同时绑定了
click
事件
和
dbl
click
事件
,而这两个
事件
又要处理相对独立的业务,也就是
click
的时候不能触发
dbl
click
,
dbl
click
的时候不能触发
click
。在实际测试中发现,当
dbl
click
的时候,总会出现1次
click
。下文将要
解决
的就是这个问题。
首先我们要清楚
click
和
dbl
click
的执行顺序,测试过程略,下面...
1. 使用修饰符
Vue提供了修饰符来处理
事件
,我们可以使用 `@
click
` 和 `@
dbl
click
` 两个
事件
,加上 `.prevent` 修饰符来防止浏览器默认行为,以及 `.stop` 修饰符来阻止
事件
冒泡。
<template>
<div @
click
.stop.prevent="on
Click
" @
dbl
click
.stop.prevent="on
Dbl
Click
"></div>
</template>
<script>
export default {
methods: {
on
Click
() {
// 单击
事件
处理函数
on
Dbl
Click
() {
// 双击
事件
处理函数
</script>
2. 使用计时器
当用户单击一个元素时,设置一个计时器,在一定时间内判断是否触发了双击
事件
。如果在这段时间内触发了双击
事件
,则取消单击
事件
的触发。
<template>
<div @
click
="on
Click
" @
dbl
click
="on
Dbl
Click
"></div>
</template>
<script>
export default {
data() {
return {
timer: null
methods: {
on
Click
() {
this.timer = setTimeout(() => {
// 单击
事件
处理函数
this.timer = null
}, 300)
on
Dbl
Click
() {
if (this.timer) {
clearTimeout(this.timer)
this.timer = null
// 双击
事件
处理函数
</script>
以上两种
方法
都可以
解决
单击
事件
和双击
事件
的
冲突
问题,具体使用哪种
方法
,可以根据实际情况来选择。
linux 配置全用户的环境变量,profile.d文件夹的作用
小白一个~:
nacos 部署 Could not retrieve transation read-only status server
雨中奔跑的小孩:
SpringSecurity 用户名和密码的校验过程及自定义密码验证
weixin_43793908: