Element日历区分上个月下个月等按钮和日期点击事件

文章目录

  • 前言
  • 解决办法
    • 给日历中的`tbody`元素添加点击事件:
  • 其他思路
    • watch监听日历绑定数据变化实现更新数据:
    • 给上个月,下个月,今天三个按钮添加点击事件:

前言

前言:最近做个酒店管理系统,需要点击日历选择日期查询当天的酒店起价,这时我才用了element的日历(结合了element的对话框)。
功能需求:点击价格日历打开日历对话框,点击日期更新酒店起价并关闭对话框,点击下个月,上个月以及今天只是更新日历而不关闭对话框和请求新起价。

此过程我一路探索,都找不到比较好的办法,就只能退而求次,这里我才用的是给日历中的tbody元素添加点击事件,有兴趣可以看后面我其中想到的一些办法,只是我没实现出来。


解决办法

给日历中的tbody元素添加点击事件:

代码
日历:

		//dialogTableVisible控制是否打开日历对话框
  	//日历时间数据保存在priceTime中
   
 

点击打开日历对话框事件代码:

//打开价格日历
openDate(){
  this.dialogTableVisible = true		      //打开日历对话框
  this.$nextTick(() => {                      //给点击日历绑定绑定监听事件,效果:只有点击日期才去请求新价格并关闭弹窗,点击下个月,上个月等等不变化
    console.log('aaa')
    var prevBtn = document.querySelector('tbody')		//给tbody添加事件,也就是日期那部分
    prevBtn.addEventListener('click',() => {
      this.dialogTableVisible = false				   //点击关闭日历对话框
      this.reqHotelPrice()						       //请求新的酒店起价
    })
  })
},

其他思路

watch监听日历绑定数据变化实现更新数据:

watch: {
   priceTime(newval,oldval){
   this.dialogTableVisible = false
   this.reqHotelPrice()
 }
},

虽然每次在日历选择日期都会触发关闭日历对话框和查询新的酒店起价。
我无法解决的地方:点击按钮上个月,下个月,今天等都会触发日历数据更新从而触发关闭日历对话框和查询新的酒店起价,这给用户的体验不好。


给上个月,下个月,今天三个按钮添加点击事件:

通过属性选择器给这三个按钮添加点击事件(给当月的日期添加点击关闭日历对话框并请求新的起价),我虽然可以给三个按钮添加点击事件,但在该点击事件中给当月日期添加点击关闭日历对话框并请求新的起价事件不起作用。

this.$nextTick(() => {
  // 点击上个月
  let prevBtn1 = document.querySelector('.el-calendar__button-group .el-button-group>button:nth-child(1)');
  prevBtn1.addEventListener('click',() => {
    consolo.log('上个月');
  })
  // 点击今天
  let prevBtn2 = document.querySelector('.el-calendar__button-group .el-button-group>button:nth-child(2)');
  prevBtn2.addEventListener('click',() => {
    consolo.log('今天');
  })
  // 点击下个月
  let prevBtn3 = document.querySelector('.el-calendar__button-group .el-button-group>button:nth-child(3)');
  prevBtn3.addEventListener('click',() => {
    consolo.log('下个月');
  })
})

你可能感兴趣的:(element-ui,日历,js,vue)