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

前言

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

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


解决办法

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

代码
日历:

<el-dialog title="价格日历" :visible.sync="dialogTableVisible">		//dialogTableVisible控制是否打开日历对话框
  <el-calendar v-model="priceTime">	//日历时间数据保存在priceTime中
   </el-calendar>
 </el-dialog>

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

//打开价格日历
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('下个月');
  })
})
  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
element ui 日历是一款常用的前端组件,用于展示日期和时间的选择器。点击下一个月按钮时,会自动切换到下一个月份日历视图。 在element ui的日历组件中,点击下一个月按钮可以通过以下步骤实现: 1. 首先,需要在页面中引入element ui的相关样式和脚本文件,确保日历组件能够正常运行。 2. 在HTML中创建一个div容器,并为其设置一个唯一的id,用于容纳日历组件。 3. 在JS代码中,使用element ui的Calendar组件将div容器与日历组件关联起来。通过设置属性initial-date可以指定日历初始化时所显示的日期,默认显示当前日期。 4. 当用户点击下一个月按钮时,触发一个事件,通过监听change事件来实现。在事件处理函数中,可以获取当前日期,并使用Date对象的相关方法实现日期的增减,并更新日历组件的显示。 简单的示例代码如下: HTML代码: ```html <div id="calendar"></div> ``` JS代码: ```javascript Vue.use(ElementUI); new Vue({ el: '#app', data: { currentDate: new Date() }, methods: { handleClickNextMonth() { let nextMonth = new Date(this.currentDate.getFullYear(), this.currentDate.getMonth() + 1, 1); this.currentDate = nextMonth; } } }); ``` 在以上代码中,我们使用Vue框架的相关语法来创建了一个Vue实例,并给其data属性添加了一个currentDate属性,用于保存当前显示的日期。通过监听点击事件,我们可以在handleClickNextMonth方法中实现日期的增减并更新currentDate属性的值。 最后,在HTML中将id为calendar的div与日历组件关联起来,通过绑定指令来监听事件并触发相关方法: ```html <div id="app"> <el-calendar :initial-date="currentDate" @change="handleClickNextMonth"></el-calendar> </div> ``` 这样,当用户点击下一个月按钮时,就会触发handleClickNextMonth方法,实现日历的切换。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值