使用jqurey click事件叠加的原因以及解决方案

132 阅读1分钟

背景

为实现在地图上点击各个控件,触发不同的事件,采用了事件内触发事件的方法。

在点击事件中绑定点击事件中,发现事件会不断叠加,因此页面也出现更多的弹窗,体验很不雅观。

image.png

const self = this
self.map.on('click', function(evt) {
          $(document).on('click', '#test', function(e) {
            self.$message({
              type: 'warning',
              duration: 2000,
              message: '请直接点击地图位置更改企业经纬度'
            })
          })
      })

原因分析

出现这种情况是因为每点击一下document就会绑定一遍事件. 在每次按钮的点击事件触发后,都被会记录下来,后面的每次click事件,都会重复触发前面积累的事件。

解决方案

使用unbind(),在每次触发点击事件的方法前,先解绑之前的事件,再重新触发新的点击事件

$('#passCompany').unbind('click').click(function(e) {
     self.$message({
          type: 'warning',
          duration: 2000,
          message: '请直接点击地图位置更改企业经纬度'
              })
     self.id = e.target.value
})